Jacek Lewandowski created CASSANDRA-18066:
---------------------------------------------

             Summary: Server should be started in @Before rather than 
@BeforeClass in CQLTester
                 Key: CASSANDRA-18066
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-18066
             Project: Cassandra
          Issue Type: Bug
          Components: Test/unit
            Reporter: Jacek Lewandowski


I can see that there is some misunderstanding in the project of 
{{@BeforeClass}} annotated methods. 

Given we have a static method {{@BeforeClass static void initA()}} in 
{{CQLTester}} and {{@BeforeClass static void initB()}} in {{SomeTestClass 
extends CQLTester}}, it will run like the following:

1. static initializer of {{CQLTester}}
2. {{initA()}}
3. static initializer of {{SomeTestClass}}
4. {{initB()}}

Since the server is started in (2), there is essentially no way to consistently 
set startup properties or configuration of {{DatabaseDescriptor}} in 
{{SomeTestClass}} so that the starting server can pick it consistently. That 
is, if something works, it is just because some server class has not been used 
yet, but this actually cannot be guaranteed.

When I look in the code, it seems like the understanding of JUnit was that if 
{{initB()}} is defined, then {{initA()}} is not called, but this is not true.

Therefore, I propose to move the server initialization from {{initA()}} (call 
to {{SchemaLoader.prepareServer()}} to a method annotated with {{@Before}} in 
{{CQLTester}} so that the server is started with the first test case. Then, we 
will be sure that call to {{initB()}} will happen before the server is 
initialized and we will be able to set configuration consistently.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to