Sarvesh Tamba created KAFKA-7580:
------------------------------------

             Summary: 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: 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


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)

Reply via email to