Skip to content

Commit 40a0d23

Browse files
authored
Merge pull request #116 from russgold/unit_test_cleanup
Unit test cleanup
2 parents 2e1fc6e + 870ef28 commit 40a0d23

File tree

11 files changed

+211
-84
lines changed

11 files changed

+211
-84
lines changed

pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,13 @@
496496
<artifactId>junit</artifactId>
497497
<version>${junit-version}</version>
498498
</dependency>
499+
<dependency>
500+
<groupId>org.apache.commons</groupId>
501+
<artifactId>commons-exec</artifactId>
502+
<version>1.3</version>
503+
<scope>test</scope>
504+
</dependency>
505+
499506
</dependencies>
500507

501508
<properties>
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package oracle.kubernetes;
2+
3+
import org.apache.commons.exec.CommandLine;
4+
import org.apache.commons.exec.DefaultExecutor;
5+
6+
import java.io.ByteArrayOutputStream;
7+
import java.io.IOException;
8+
import java.io.PrintStream;
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
import java.util.logging.ConsoleHandler;
12+
import java.util.logging.Handler;
13+
import java.util.logging.Logger;
14+
15+
public class TestUtils {
16+
private static Boolean kubernetesStatus;
17+
18+
/**
19+
* Returns true if Kubernetes-dependent tests should run
20+
*/
21+
public static boolean isKubernetesAvailable() { // assume it is available when running on Linux
22+
if (kubernetesStatus == null)
23+
kubernetesStatus = checkKubernetes();
24+
return kubernetesStatus;
25+
}
26+
27+
private static Boolean checkKubernetes() {
28+
PrintStream savedOut = System.out;
29+
System.setOut(new PrintStream(new ByteArrayOutputStream()));
30+
try {
31+
CommandLine cmdLine = CommandLine.parse("kubectl cluster-info");
32+
DefaultExecutor executor = new DefaultExecutor();
33+
executor.execute(cmdLine);
34+
return true;
35+
} catch (IOException e) {
36+
return false;
37+
} finally {
38+
System.setOut(savedOut);
39+
}
40+
}
41+
42+
public static List<Handler> removeConsoleHandlers(Logger logger) {
43+
List<Handler> savedHandlers = new ArrayList<>();
44+
for (Handler handler : logger.getHandlers()) {
45+
if (handler instanceof ConsoleHandler) {
46+
savedHandlers.add(handler);
47+
}
48+
}
49+
for (Handler handler : savedHandlers)
50+
logger.removeHandler(handler);
51+
return savedHandlers;
52+
}
53+
54+
public static void restoreConsoleHandlers(Logger logger, List<Handler> savedHandlers) {
55+
for (Handler handler : savedHandlers) {
56+
logger.addHandler(handler);
57+
}
58+
}
59+
}

src/test/java/oracle/kubernetes/custom/TestCustomObjectApis.java renamed to src/test/java/oracle/kubernetes/custom/CustomObjectApisTest.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,32 @@
1212
import io.kubernetes.client.models.V1beta1CustomResourceDefinitionSpec;
1313
import io.kubernetes.client.util.Watch;
1414
import io.kubernetes.client.util.Watch.Response;
15+
import oracle.kubernetes.TestUtils;
1516
import oracle.kubernetes.operator.helpers.ClientHelper;
1617
import oracle.kubernetes.operator.helpers.ClientHolder;
1718
import oracle.kubernetes.operator.logging.LoggingFacade;
1819
import oracle.kubernetes.operator.logging.LoggingFactory;
1920
import oracle.kubernetes.operator.logging.MessageKeys;
2021
import oracle.kubernetes.operator.watcher.Watcher;
2122
import oracle.kubernetes.operator.watcher.Watching;
22-
23+
import org.junit.After;
24+
import org.junit.Before;
25+
import org.junit.Ignore;
2326
import org.junit.Test;
2427

2528
import java.io.IOException;
2629
import java.util.Collections;
2730
import java.util.HashMap;
31+
import java.util.List;
2832
import java.util.Map;
2933
import java.util.concurrent.atomic.AtomicBoolean;
34+
import java.util.logging.Handler;
3035

3136
/**
3237
* Test CustomResourceDefinitions and custom objects
3338
*/
34-
public class TestCustomObjectApis {
39+
@Ignore("Ignore - sometimes runs indefinitely")
40+
public class CustomObjectApisTest {
3541

3642
// Parameters for custom resources
3743
static final String NAMESPACE = "default";
@@ -44,6 +50,17 @@ public class TestCustomObjectApis {
4450
private static final LoggingFacade LOGGER = LoggingFactory.getLogger("Operator", "Operator");
4551
private AtomicBoolean finished = new AtomicBoolean(false);
4652
private int timeoutLoop = 0;
53+
private List<Handler> savedHandlers;
54+
55+
@Before
56+
public void setUp() throws Exception {
57+
savedHandlers = TestUtils.removeConsoleHandlers(LOGGER.getUnderlyingLogger());
58+
}
59+
60+
@After
61+
public void tearDown() throws Exception {
62+
TestUtils.restoreConsoleHandlers(LOGGER.getUnderlyingLogger(), savedHandlers);
63+
}
4764

4865
@Test
4966
public void testCustomResourceWatches() throws Exception {
@@ -67,7 +84,6 @@ public void testCustomResourceWatches() throws Exception {
6784
e.printStackTrace();
6885
LOGGER.info(MessageKeys.EXCEPTION, e);
6986
} finally {
70-
System.out.println("End of this test");
7187
ClientHelper.getInstance().recycle(client);
7288
}
7389
}
@@ -167,7 +183,6 @@ public Watch initiateWatch(Object context, String resourceVersion) throws ApiExc
167183

168184
private void formatTheObject(String type, Object object) {
169185
TestDomain dom = (TestDomain) object;
170-
System.out.println(">>>>> " + type + " " + dom.toString());
171186
}
172187

173188
@Override

src/test/java/oracle/kubernetes/custom/TestDomainListWatcher.java renamed to src/test/java/oracle/kubernetes/custom/DomainWatcherTest.java

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */
22
package oracle.kubernetes.custom;
33

4+
import io.kubernetes.client.ApiException;
45
import io.kubernetes.client.models.V1DeleteOptions;
56
import io.kubernetes.client.models.V1ObjectMeta;
67
import io.kubernetes.client.models.V1Status;
@@ -14,23 +15,22 @@
1415
import oracle.kubernetes.operator.helpers.ClientHelper;
1516
import oracle.kubernetes.operator.helpers.ClientHolder;
1617
import oracle.kubernetes.operator.watcher.WatchingEventDestination;
17-
import org.junit.After;
18-
import org.junit.Assume;
19-
import org.junit.Before;
20-
import org.junit.Test;
18+
import org.junit.*;
2119

2220
import java.util.ArrayList;
2321
import java.util.Collections;
2422
import java.util.UUID;
2523
import java.util.concurrent.atomic.AtomicBoolean;
2624

25+
import static oracle.kubernetes.TestUtils.isKubernetesAvailable;
2726
import static org.junit.Assert.fail;
2827

2928
/**
3029
* This test class verifies that watch events are received for custom resource
3130
* operations.
3231
*/
33-
public class TestDomainListWatcher implements WatchingEventDestination<Domain> {
32+
@Ignore
33+
public class DomainWatcherTest implements WatchingEventDestination<Domain> {
3434

3535
private static final String NAMESPACE = "default";
3636
private static final String NAME = "domains.weblogic.oracle";
@@ -46,7 +46,7 @@ public class TestDomainListWatcher implements WatchingEventDestination<Domain> {
4646
private boolean crdCreatedHere = false;
4747

4848
@Before
49-
public void beforeTest() {
49+
public void beforeTest() throws ApiException {
5050
// Create the Domain definition if it doesn't exist.
5151
if (isKubernetesAvailable()) createWeblogicCRD();
5252
}
@@ -62,7 +62,7 @@ public void afterTest() {
6262
* they are all reported.
6363
*/
6464
@Test
65-
public void testDomainListWatcher() {
65+
public void testDomainListWatcher() throws ApiException {
6666
Assume.assumeTrue(isKubernetesAvailable());
6767
AtomicBoolean isStopping = new AtomicBoolean(false);
6868
DomainWatcher dlw = DomainWatcher.create("default", "", this, isStopping);
@@ -88,7 +88,6 @@ public void testDomainListWatcher() {
8888
for (int count = 30; count > 0; count--) {
8989
synchronized (feedback) {
9090
if (feedback.isEmpty()) {
91-
System.out.println("Processed all events successfully, shutting down");
9291
isStopping.set(true);
9392
return;
9493
}
@@ -105,10 +104,6 @@ public void testDomainListWatcher() {
105104
fail("Not all watch events were received for created objects");
106105
}
107106

108-
private boolean isKubernetesAvailable() { // assume it is available when running on Linux
109-
return System.getProperty("os.name").toLowerCase().contains("nix");
110-
}
111-
112107
// This override intercepts all watch events whioch would have
113108
// normally sent to the operator for processing.
114109
@Override
@@ -136,7 +131,7 @@ private void sleep(long ms) {
136131
/**
137132
* Create the weblogic-operator custom resource
138133
*/
139-
private void createWeblogicCRD() {
134+
private void createWeblogicCRD() throws ApiException {
140135

141136
ClientHolder clientHolder = ClientHelper.getInstance().take();
142137

@@ -202,7 +197,7 @@ private void deleteWeblogicCRD() {
202197
System.out.println("Deleted CRD:" + NAME);
203198
}
204199

205-
private void createCustomResource(ClientHolder clientHolder, String name, boolean tag) {
200+
private void createCustomResource(ClientHolder clientHolder, String name, boolean tag) throws ApiException {
206201

207202
Domain domain = new Domain();
208203
domain.setApiVersion(GROUP + "/" + VERSION);
@@ -218,8 +213,7 @@ private void createCustomResource(ClientHolder clientHolder, String name, boolea
218213
domain.setSpec(spec);
219214

220215
String token = "ADDED." + name;
221-
try {
222-
if ( tag ) {
216+
if ( tag ) {
223217
System.out.println("Creating " + token);
224218
synchronized (feedback) {
225219
feedback.add(token);
@@ -233,10 +227,6 @@ private void createCustomResource(ClientHolder clientHolder, String name, boolea
233227
, PLURAL
234228
, domain
235229
, "false");
236-
} catch (Exception ex) {
237-
fail("Failed to create custom resource: " + name
238-
+ ", Error: " + ex);
239-
}
240230
}
241231

242232
private void deleteCustomResource(ClientHolder client, String name, boolean tag) {

src/test/java/oracle/kubernetes/operator/ExternalChannelTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,23 @@
44
package oracle.kubernetes.operator;
55

66
import io.kubernetes.client.models.V1ObjectMeta;
7+
import oracle.kubernetes.TestUtils;
78
import oracle.kubernetes.operator.domain.model.oracle.kubernetes.weblogic.domain.v1.Domain;
89
import oracle.kubernetes.operator.domain.model.oracle.kubernetes.weblogic.domain.v1.DomainSpec;
10+
import oracle.kubernetes.operator.logging.LoggingFactory;
911
import oracle.kubernetes.operator.wlsconfig.NetworkAccessPoint;
1012
import oracle.kubernetes.operator.wlsconfig.WlsDomainConfig;
1113
import oracle.kubernetes.operator.wlsconfig.WlsServerConfig;
14+
import org.junit.After;
1215
import org.junit.Before;
1316
import org.junit.Test;
1417

1518
import java.lang.reflect.Field;
1619
import java.util.ArrayList;
1720
import java.util.Collection;
1821
import java.util.List;
22+
import java.util.logging.Handler;
23+
import java.util.logging.Logger;
1924

2025
import static org.junit.Assert.assertEquals;
2126
import static org.junit.Assert.assertNotNull;
@@ -61,6 +66,19 @@ public class ExternalChannelTest {
6166
" }" +
6267
"]}}";
6368

69+
private static final Logger UNDERLYING_LOGGER = LoggingFactory.getLogger("Operator", "Operator").getUnderlyingLogger();
70+
private List<Handler> savedhandlers;
71+
72+
@Before
73+
public void disableConsoleLogging() {
74+
savedhandlers = TestUtils.removeConsoleHandlers(UNDERLYING_LOGGER);
75+
}
76+
77+
@After
78+
public void restoreConsoleLogging() {
79+
TestUtils.restoreConsoleHandlers(UNDERLYING_LOGGER, savedhandlers);
80+
}
81+
6482
@Before
6583
public void setupConstants() throws NoSuchFieldException {
6684

src/test/java/oracle/kubernetes/operator/HealthCheckHelperTest.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import io.kubernetes.client.ApiException;
66
import io.kubernetes.client.models.V1Namespace;
77
import io.kubernetes.client.models.V1ObjectMeta;
8+
import oracle.kubernetes.TestUtils;
89
import oracle.kubernetes.operator.helpers.ClientHelper;
910
import oracle.kubernetes.operator.helpers.ClientHolder;
1011
import oracle.kubernetes.operator.helpers.HealthCheckHelper;
@@ -18,10 +19,10 @@
1819
import org.junit.Test;
1920

2021
import java.io.ByteArrayOutputStream;
22+
import java.util.ArrayList;
2123
import java.util.Collections;
22-
import java.util.logging.Handler;
23-
import java.util.logging.SimpleFormatter;
24-
import java.util.logging.StreamHandler;
24+
import java.util.List;
25+
import java.util.logging.*;
2526

2627
public class HealthCheckHelperTest {
2728

@@ -35,12 +36,14 @@ public class HealthCheckHelperTest {
3536
private static final LoggingFacade LOGGER = LoggingFactory.getLogger("Operator", "Operator");
3637
private static ByteArrayOutputStream bos = new ByteArrayOutputStream();
3738
private static Handler hdlr = new StreamHandler(bos, new SimpleFormatter());
39+
private List<Handler> savedHandlers = new ArrayList<>();
3840

3941
@Before
4042
public void setUp() throws Exception {
43+
savedHandlers = TestUtils.removeConsoleHandlers(LOGGER.getUnderlyingLogger());
4144
LOGGER.getUnderlyingLogger().addHandler(hdlr);
4245

43-
if (!isKubernetesAvailable()) return;
46+
if (!TestUtils.isKubernetesAvailable()) return;
4447

4548
ClientHolder client = ClientHelper.getInstance().take();
4649
try {
@@ -56,7 +59,7 @@ public void setUp() throws Exception {
5659

5760
@After
5861
public void tearDown() throws Exception {
59-
62+
TestUtils.restoreConsoleHandlers(LOGGER.getUnderlyingLogger(), savedHandlers);
6063
LOGGER.getUnderlyingLogger().removeHandler(hdlr);
6164

6265
// Delete anything we created
@@ -97,7 +100,7 @@ public void testUnitTestNamespace() throws Exception {
97100

98101
@Test
99102
public void testAccountNoPrivs() throws Exception {
100-
Assume.assumeTrue(isKubernetesAvailable());
103+
Assume.assumeTrue(TestUtils.isKubernetesAvailable());
101104
unitHealthCheckHelper.performSecurityChecks("unit-test-svc-account-no-privs");
102105
hdlr.flush();
103106
String logOutput = bos.toString();
@@ -107,10 +110,6 @@ public void testAccountNoPrivs() throws Exception {
107110
bos.reset();
108111
}
109112

110-
private boolean isKubernetesAvailable() { // assume it is available whenever running on linux
111-
return System.getProperty("os.name").toLowerCase().contains("nix");
112-
}
113-
114113
// Create a named namespace
115114
private V1Namespace createNamespace(ClientHolder client, String name) throws Exception {
116115

0 commit comments

Comments
 (0)