You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "Matthias J. Sax (JIRA)" <ji...@apache.org> on 2018/11/01 21:05:00 UTC
[jira] [Commented] (KAFKA-7580) Unit Test
'shouldThrowProcessorStateExceptionOnOpeningReadOnlyDir' fails when run as
root user
[ https://issues.apache.org/jira/browse/KAFKA-7580?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16672198#comment-16672198 ]
Matthias J. Sax commented on KAFKA-7580:
----------------------------------------
Thanks for reporting this. I am just wondering, why this is a problem. Running test as root user is not common...
> Unit Test 'shouldThrowProcessorStateExceptionOnOpeningReadOnlyDir' fails when run as root user
> ----------------------------------------------------------------------------------------------
>
> Key: KAFKA-7580
> URL: https://issues.apache.org/jira/browse/KAFKA-7580
> Project: Kafka
> Issue Type: Bug
> Components: streams, unit tests
> Affects Versions: 2.0.0, 2.0.1, 2.1.0, 2.2.0, 2.1.1, 2.0.2
> Environment: Ubuntu 16.04.3 LTS
> Reporter: Sarvesh Tamba
> Priority: Blocker
>
> Created a non-root user and ran the following command to execute the failiing unit test:-
> ./gradlew streams:unitTest --tests org.apache.kafka.streams.state.internals.RocksDBStoreTest.shouldThrowProcessorStateExceptionOnOpeningReadOnlyDir
> For a root user, the test case fails:-
> =====================================
> > Task :streams:testClasses UP-TO-DATE
> > Task :streams:unitTest
> org.apache.kafka.streams.state.internals.RocksDBStoreTest > shouldThrowProcessorStateExceptionOnOpeningReadOnlyDir FAILED
> java.lang.AssertionError: Expected exception: org.apache.kafka.streams.errors.ProcessorStateException
> 1 test completed, 1 failed
> > Task :streams:unitTest FAILED
> FAILURE: Build failed with an exception.
> * What went wrong:
> Execution failed for task ':streams:unitTest'.
> > There were failing tests. See the report at: file:///root/sarvesh/kafka-gradle/kafka-2.0.0/streams/build/reports/tests/unitTest/index.html
> * Try:
> Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
> * Get more help at https://help.gradle.org
> BUILD FAILED in 20s
> 26 actionable tasks: 2 executed, 24 up-to-date
> =====================================
> However, for a non-root user the test cass passes as success:-
> =====================================
> > Task :streams:testClasses
> > Task :streams:unitTest
> org.apache.kafka.streams.state.internals.RocksDBStoreTest > shouldThrowProcessorStateExceptionOnOpeningReadOnlyDir PASSED
> BUILD SUCCESSFUL in 45s
> 26 actionable tasks: 4 executed, 22 up-to-date
> =====================================
> The failing unit test - "shouldThrowProcessorStateExceptionOnOpeningReadOnlyDir" creates a temporary file directory and sets it as readOnly. The unit test is intended to throw an exception - "ProcessorStateException", when the readOnly temporary file directory is opened/accessed.
> By default, non-root users opening/accessing readOnly file directory is not allowed and it rightly throws up an error/exception in the unit test(which is the intention of the unit test and it passes for non-root users).
> sar@p006vm18:~/kafka-gradle/kafka-2.0.0$ mkdir /tmp/readOnlyDir/parent
> mkdir: cannot create directory â/tmp/readOnlyDir/parentâ: Permission denied
>
> sar@p006vm18:~/kafka-gradle/kafka-2.0.0$ ll /tmp/readOnlyDir/
> ls: cannot access '/tmp/readOnlyDir/..': Permission denied
> ls: cannot access '/tmp/readOnlyDir/.': Permission denied
> ls: cannot access '/tmp/readOnlyDir/kid': Permission denied
> ls: cannot access '/tmp/readOnlyDir/child': Permission denied
> total 0
> d????????? ? ? ? ? ? ./
> d????????? ? ? ? ? ? ../
> d????????? ? ? ? ? ? child/
> d????????? ? ? ? ? ? kid/
> However, by default, root user can access any file in the system.:-
> root@p006vm18:/tmp# ll /tmp/readOnlyDir/
> total 112
> dr--rw-rw- 4 root root 4096 Nov 1 03:47 ./
> drwxrwxrwt 24 root root 98304 Nov 1 04:02 ../
> drwxr-xr-x 2 root root 4096 Nov 1 03:44 child/
> drwxrwxr-x 2 sar sar 4096 Nov 1 03:47 kid/
>
> root@p006vm18:/tmp# mkdir /tmp/readOnlyDir/parent
>
> root@p006vm18:/tmp# ll /tmp/readOnlyDir/
> total 116
> dr--rw-rw- 5 root root 4096 Nov 1 04:03 ./
> drwxrwxrwt 24 root root 98304 Nov 1 04:02 ../
> drwxr-xr-x 2 root root 4096 Nov 1 03:44 child/
> drwxrwxr-x 2 sar sar 4096 Nov 1 03:47 kid/
> drwxr-xr-x 2 root root 4096 Nov 1 04:03 parent/
> Hence the unit test does not throw an exception - "ProcessorStateException" when the readOnly temporary file directory is opened, and the unit test rightly fails for a root user.
> Two approaches for resolving this failing unit test case:-
> 1.) Run the unit tests as non-root users(simplest).
> 2.) If running the unit test as root user, make the temporary file directory as immutable in the unit test code and then test for exception(needs code changes in the unit tests):-
> root@p006vm18:/tmp# chattr +i /tmp/readOnlyDir/
> root@p006vm18:/tmp# mkdir /tmp/readOnlyDir/grandparent
> mkdir: cannot create directory â/tmp/readOnlyDir/grandparentâ: Permission denied
> A file with an immutable attribute can not be:
> - Modified
> - Deleted
> - Renamed
> - No soft or hard link created by anyone including root user.
>
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)