1
2
3 package com.azure.core.test;
4
5 import com.azure.core.util.configuration.ConfigurationManager;
6 import com.azure.core.test.utils.TestResourceNamer;
7 import org.junit.After;
8 import org.junit.Assert;
9 import org.junit.Before;
10 import org.junit.BeforeClass;
11 import org.junit.rules.TestName;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
14
15 import java.io.IOException;
16 import java.util.Locale;
17
18
19
20
21 public abstract class TestBase {
22
23 private static final String AZURE_TEST_MODE = "AZURE_TEST_MODE";
24 private static TestMode testMode;
25
26 private final Logger logger = LoggerFactory.getLogger(TestBase.class);
27
28 protected InterceptorManager interceptorManager;
29 protected TestResourceNamer testResourceNamer;
30
31
32
33
34
35 @BeforeClass
36 public static void setupClass() {
37 testMode = initializeTestMode();
38 }
39
40
41
42
43
44 @Before
45 public void setupTest() {
46 final String testName = testName();
47 if (logger.isInfoEnabled()) {
48 logger.info("Test Mode: {}, Name: {}", testMode, testName);
49 }
50
51 try {
52 interceptorManager = new InterceptorManager(testName, testMode);
53 } catch (IOException e) {
54 if (logger.isErrorEnabled()) {
55 logger.error("Could not create interceptor for {}", testName, e);
56 }
57 Assert.fail();
58 }
59 testResourceNamer = new TestResourceNamer(testName, testMode, interceptorManager.getRecordedData());
60
61 beforeTest();
62 }
63
64
65
66
67 @After
68 public void teardownTest() {
69 afterTest();
70 interceptorManager.close();
71 }
72
73
74
75
76
77
78 public TestMode getTestMode() {
79 return testMode;
80 }
81
82
83
84
85
86
87
88
89
90 protected abstract String testName();
91
92
93
94
95
96 protected void beforeTest() {
97 }
98
99
100
101
102
103 protected void afterTest() {
104 }
105
106 private static TestMode initializeTestMode() {
107 final Logger logger = LoggerFactory.getLogger(TestBase.class);
108 final String azureTestMode = ConfigurationManager.getConfiguration().get(AZURE_TEST_MODE);
109
110 if (azureTestMode != null) {
111 try {
112 return TestMode.valueOf(azureTestMode.toUpperCase(Locale.US));
113 } catch (IllegalArgumentException e) {
114 if (logger.isErrorEnabled()) {
115 logger.error("Could not parse '{}' into TestEnum. Using 'Playback' mode.", azureTestMode);
116 }
117
118 return TestMode.PLAYBACK;
119 }
120 }
121
122 if (logger.isInfoEnabled()) {
123 logger.info("Environment variable '{}' has not been set yet. Using 'Playback' mode.", AZURE_TEST_MODE);
124 }
125 return TestMode.PLAYBACK;
126 }
127 }