You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "Sarvesh Tamba (JIRA)" <ji...@apache.org> on 2018/11/01 09:29:00 UTC

[jira] [Created] (KAFKA-7580) Unit Test 'shouldThrowProcessorStateExceptionOnOpeningReadOnlyDir' fails when run as root user

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)