Skip to content

Commit f6d91f4

Browse files
authored
Merge pull request #918 from oracle/OWLS-72452
OWLS 72452: WLDF scaling failing on Jenkins with Operator Cert File not found
2 parents 18b7f69 + e3eb85a commit f6d91f4

File tree

8 files changed

+111
-24
lines changed

8 files changed

+111
-24
lines changed

operator/src/main/java/oracle/kubernetes/operator/Main.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ public Thread newThread(Runnable r) {
143143
new AtomicReference<>(DateTime.now());
144144

145145
private static String principal;
146-
private static RestServer restServer = null;
147146
private static KubernetesVersion version = null;
148147

149148
static final String READINESS_PROBE_FAILURE_EVENT_FILTER =
@@ -450,13 +449,13 @@ private static Collection<String> getTargetNamespaces(String tnValue, String nam
450449

451450
private static void startRestServer(String principal, Collection<String> targetNamespaces)
452451
throws Exception {
453-
restServer = new RestServer(new RestConfigImpl(principal, targetNamespaces));
454-
restServer.start(container);
452+
RestServer.create(new RestConfigImpl(principal, targetNamespaces));
453+
RestServer.getInstance().start(container);
455454
}
456455

457456
private static void stopRestServer() {
458-
restServer.stop();
459-
restServer = null;
457+
RestServer.getInstance().stop();
458+
RestServer.destroy();
460459
}
461460

462461
private static void startLivenessThread() {

operator/src/main/java/oracle/kubernetes/operator/helpers/PodHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import oracle.kubernetes.operator.ProcessingConstants;
2222
import oracle.kubernetes.operator.TuningParameters;
2323
import oracle.kubernetes.operator.logging.MessageKeys;
24+
import oracle.kubernetes.operator.rest.RestServer;
2425
import oracle.kubernetes.operator.steps.DefaultResponseStep;
2526
import oracle.kubernetes.operator.work.Component;
2627
import oracle.kubernetes.operator.work.NextAction;
@@ -33,7 +34,6 @@ public class PodHelper {
3334
private PodHelper() {}
3435

3536
static class AdminPodStepContext extends PodStepContext {
36-
private static final String INTERNAL_OPERATOR_CERT_FILE = "internalOperatorCert";
3737
static final String INTERNAL_OPERATOR_CERT_ENV = "INTERNAL_OPERATOR_CERT";
3838

3939
AdminPodStepContext(Step conflictStep, Packet packet) {
@@ -132,7 +132,7 @@ protected Map<String, String> getPodAnnotations() {
132132
}
133133

134134
private String getInternalOperatorCertFile(TuningParameters tuningParameters) {
135-
return tuningParameters.get(INTERNAL_OPERATOR_CERT_FILE);
135+
return RestServer.getInstance().getInternalCertificateAsBase64PEM();
136136
}
137137
}
138138

operator/src/main/java/oracle/kubernetes/operator/rest/RestConfigImpl.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@ public class RestConfigImpl implements RestConfig {
2020
private final String principal;
2121
private final Collection<String> targetNamespaces;
2222

23-
private static final String OPERATOR_DIR = "/operator/";
24-
private static final String INTERNAL_REST_IDENTITY_DIR = OPERATOR_DIR + "internal-identity/";
25-
private static final String INTERNAL_CERTIFICATE =
26-
INTERNAL_REST_IDENTITY_DIR + "internalOperatorCert";
23+
static final String OPERATOR_DIR = "/operator/";
24+
static final String INTERNAL_REST_IDENTITY_DIR = OPERATOR_DIR + "internal-identity/";
25+
static final String INTERNAL_CERTIFICATE = INTERNAL_REST_IDENTITY_DIR + "internalOperatorCert";
2726
private static final String INTERNAL_CERTIFICATE_KEY =
2827
INTERNAL_REST_IDENTITY_DIR + "internalOperatorKey";
2928
private static final String EXTERNAL_REST_IDENTITY_DIR = OPERATOR_DIR + "external-identity/";

operator/src/main/java/oracle/kubernetes/operator/rest/RestServer.java

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import javax.net.ssl.SSLContext;
2020
import oracle.kubernetes.operator.logging.LoggingFacade;
2121
import oracle.kubernetes.operator.logging.LoggingFactory;
22+
import oracle.kubernetes.operator.logging.MessageKeys;
2223
import oracle.kubernetes.operator.work.Container;
2324
import oracle.kubernetes.operator.work.ContainerResolver;
2425
import org.apache.commons.codec.binary.Base64;
@@ -49,6 +50,8 @@ public class RestServer {
4950
private static final LoggingFacade LOGGER = LoggingFactory.getLogger("Operator", "Operator");
5051
private static final int CORE_POOL_SIZE = 3;
5152

53+
private static RestServer INSTANCE = null;
54+
5255
private RestConfig config;
5356

5457
// private String baseHttpUri;
@@ -63,14 +66,61 @@ public class RestServer {
6366
SSL_PROTOCOL
6467
}; // ONLY support TLSv1.2 (by default, we would get TLSv1 and TLSv1.1 too)
6568

69+
/**
70+
* Create singleton instance of the WebLogic Operator's RestServer. Should only be called once.
71+
*
72+
* @param restConfig - the WebLogic Operator's REST configuration. Throws IllegalStateException if
73+
* instance already created.
74+
*/
75+
public static synchronized void create(RestConfig restConfig) {
76+
LOGGER.entering();
77+
try {
78+
if (INSTANCE == null) {
79+
INSTANCE = new RestServer(restConfig);
80+
return;
81+
}
82+
83+
throw new IllegalStateException();
84+
} finally {
85+
LOGGER.exiting();
86+
}
87+
}
88+
89+
/**
90+
* Accessor for obtaining reference to the RestServer singleton instance.
91+
*
92+
* @return RestServer - Singleton instance of the RestServer
93+
*/
94+
public static synchronized RestServer getInstance() {
95+
return INSTANCE;
96+
}
97+
98+
/**
99+
* Release RestServer singleton instance. Should only be called once. Throws IllegalStateException
100+
* if singleton instance not created.
101+
*/
102+
public static void destroy() {
103+
LOGGER.entering();
104+
try {
105+
if (INSTANCE != null) {
106+
INSTANCE = null;
107+
return;
108+
}
109+
110+
throw new IllegalStateException();
111+
} finally {
112+
LOGGER.exiting();
113+
}
114+
}
115+
66116
/**
67117
* Constructs the WebLogic Operator REST server.
68118
*
69119
* @param config - contains the REST server's configuration, which includes the hostnames and port
70120
* numbers that the ports run on, the certificates and private keys for ssl, and the backend
71121
* implementation that does the real work behind the REST api.
72122
*/
73-
public RestServer(RestConfig config) {
123+
private RestServer(RestConfig config) {
74124
LOGGER.entering();
75125
this.config = config;
76126
baseExternalHttpsUri = "https://" + config.getHost() + ":" + config.getExternalHttpsPort();
@@ -168,6 +218,29 @@ public void stop() {
168218
LOGGER.exiting();
169219
}
170220

221+
/**
222+
* Gets the internal https port's certificate as a base64 encoded PEM.
223+
*
224+
* @return base64 encoded PEM containing the certificate, or null if unable to read the
225+
* certificate data.
226+
*/
227+
public String getInternalCertificateAsBase64PEM() {
228+
LOGGER.entering();
229+
String internalCert = null;
230+
try {
231+
internalCert =
232+
Base64.encodeBase64String(
233+
readFromDataOrFile(
234+
this.config.getOperatorInternalCertificateData(),
235+
this.config.getOperatorInternalCertificateFile()));
236+
} catch (IOException e) {
237+
LOGGER.warning(MessageKeys.EXCEPTION, e);
238+
}
239+
240+
LOGGER.exiting(internalCert);
241+
return internalCert;
242+
}
243+
171244
private HttpServer createExternalHttpsServer(Container container) throws Exception {
172245
LOGGER.entering();
173246
HttpServer result =

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import oracle.kubernetes.operator.helpers.KubernetesTestSupport;
2929
import oracle.kubernetes.operator.helpers.TuningParametersStub;
3030
import oracle.kubernetes.operator.helpers.UnitTestHash;
31+
import oracle.kubernetes.operator.rest.RestServer;
32+
import oracle.kubernetes.operator.rest.RestTest;
3133
import oracle.kubernetes.operator.steps.DomainPresenceStep;
3234
import oracle.kubernetes.operator.utils.WlsDomainConfigSupport;
3335
import oracle.kubernetes.operator.work.Step;
@@ -66,13 +68,17 @@ public void setUp() {
6668
mementos.add(testSupport.install());
6769

6870
testSupport.addDomainPresenceInfo(domainPresenceInfo);
71+
72+
RestServer.create(new RestTest.TestRestConfigImpl());
6973
}
7074

7175
@After
7276
public void tearDown() throws Exception {
7377
for (Memento memento : mementos) memento.revert();
7478

7579
testSupport.throwOnCompletionFailure();
80+
81+
RestServer.destroy();
7682
}
7783

7884
@Test

operator/src/test/java/oracle/kubernetes/operator/helpers/AdminPodHelperTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import oracle.kubernetes.operator.PodAwaiterStepFactory;
3333
import oracle.kubernetes.operator.ProcessingConstants;
3434
import oracle.kubernetes.operator.VersionConstants;
35+
import oracle.kubernetes.operator.rest.RestTest;
3536
import oracle.kubernetes.operator.work.FiberTestSupport;
3637
import oracle.kubernetes.operator.work.Packet;
3738
import oracle.kubernetes.operator.work.Step;
@@ -41,9 +42,7 @@
4142

4243
@SuppressWarnings("SameParameterValue")
4344
public class AdminPodHelperTest extends PodHelperTestBase {
44-
private static final String INTERNAL_OPERATOR_CERT_FILE_PARAM = "internalOperatorCert";
4545
private static final String INTERNAL_OPERATOR_CERT_ENV_NAME = "INTERNAL_OPERATOR_CERT";
46-
private static final String CERTFILE = "certfile";
4746

4847
public AdminPodHelperTest() {
4948
super(ADMIN_SERVER, ADMIN_PORT);
@@ -209,10 +208,9 @@ public void whenAdminPodCreated_containerHasStartServerCommand() {
209208

210209
@Test
211210
public void whenAdminPodCreated_hasOperatorCertEnvVariable() {
212-
putTuningParameter(INTERNAL_OPERATOR_CERT_FILE_PARAM, CERTFILE);
213211
assertThat(
214212
getCreatedPodSpecContainer().getEnv(),
215-
hasEnvVar(INTERNAL_OPERATOR_CERT_ENV_NAME, CERTFILE));
213+
hasEnvVar(INTERNAL_OPERATOR_CERT_ENV_NAME, RestTest.OP_CERT_DATA));
216214
}
217215

218216
@Test

operator/src/test/java/oracle/kubernetes/operator/helpers/PodHelperTestBase.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@
7777
import oracle.kubernetes.operator.PodAwaiterStepFactory;
7878
import oracle.kubernetes.operator.ProcessingConstants;
7979
import oracle.kubernetes.operator.VersionConstants;
80+
import oracle.kubernetes.operator.rest.RestServer;
81+
import oracle.kubernetes.operator.rest.RestTest;
8082
import oracle.kubernetes.operator.utils.WlsDomainConfigSupport;
8183
import oracle.kubernetes.operator.wlsconfig.NetworkAccessPoint;
8284
import oracle.kubernetes.operator.wlsconfig.WlsDomainConfig;
@@ -170,6 +172,8 @@ public void setUp() throws Exception {
170172
mementos.add(TuningParametersStub.install());
171173
mementos.add(UnitTestHash.install());
172174

175+
RestServer.create(new RestTest.TestRestConfigImpl());
176+
173177
WlsDomainConfigSupport configSupport = new WlsDomainConfigSupport(DOMAIN_NAME);
174178
configSupport.addWlsServer(ADMIN_SERVER, ADMIN_PORT);
175179
if (!ADMIN_SERVER.equals(serverName)) configSupport.addWlsServer(serverName, listenPort);
@@ -197,6 +201,8 @@ public void tearDown() throws Exception {
197201

198202
testSupport.throwOnCompletionFailure();
199203
testSupport.verifyAllDefinedResponsesInvoked();
204+
205+
RestServer.destroy();
200206
}
201207

202208
private DomainPresenceInfo createDomainPresenceInfo(Domain domain) {

operator/src/test/java/oracle/kubernetes/operator/rest/RestTest.java

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
/** Tests the Weblogic Operator REST api */
4545
public class RestTest {
4646

47-
private RestServer rs;
4847
private WebTarget externalHttpsTarget;
4948
private WebTarget internalHttpsTarget;
5049

@@ -68,7 +67,7 @@ public class RestTest {
6867

6968
private static final String CA_CERT_DATA =
7069
"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR3VENDQXFtZ0F3SUJBZ0lFVHVHU216QU5CZ2txaGtpRzl3MEJBUXNGQURDQmdURUxNQWtHQTFVRUJoTUMNClZWTXhFREFPQmdOVkJBZ1RCMDE1VTNSaGRHVXhEekFOQmdOVkJBY1RCazE1Vkc5M2JqRVhNQlVHQTFVRUNoTU8NClRYbFBjbWRoYm1sNllYUnBiMjR4R1RBWEJnTlZCQXNURUVaUFVpQlVSVk5VU1U1SElFOU9URmt4R3pBWkJnTlYNCkJBTVRFbGRsWW14dloybGpUM0JsY21GMGIzSkRRVEFlRncweE56RXlNRFV5TXpJNE1ERmFGdzB5TnpFeU1ETXkNCk16STRNREZhTUlHQk1Rc3dDUVlEVlFRR0V3SlZVekVRTUE0R0ExVUVDQk1IVFhsVGRHRjBaVEVQTUEwR0ExVUUNCkJ4TUdUWGxVYjNkdU1SY3dGUVlEVlFRS0V3NU5lVTl5WjJGdWFYcGhkR2x2YmpFWk1CY0dBMVVFQ3hNUVJrOVMNCklGUkZVMVJKVGtjZ1QwNU1XVEViTUJrR0ExVUVBeE1TVjJWaWJHOW5hV05QY0dWeVlYUnZja05CTUlJQklqQU4NCkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQWp1Q1JtOE5Wck02bjQrQ1ptZFh3M3FqRjV3T00NCnZYZVJDZG9TZ1dEalRrUmtKV1RZOVlVaGVIaVB1TGozdXZRbFNwNUNZdngwTUYyM2pxbzcyaEJqM3U2cGZqbVMNCnJBeEpSdjZQV1E3Y3dTbGU3SU1URk5Qb3NvS0wrSEZmTWxmL2o2WUtqZzlQZXJPY09ocEI2WnJWS0NxeDdvOCsNCmRpb2FxdXlYV2drKzQxdkNKeGs5QVlqRGdBM1BnNC8xQ1BPVUU4eGN4Z29ldi9teW4yTFMvZkU5NzJsNVo4eUINCnFtcXI1V09EbUZLVWNqV0tSVGlnWjFSNVBoQjNVaHhBUXN4aHJKYVZFM3drT1ZjYWdza2QvWHM2eWY3cS9pVXMNClUxL1VCc3Q1SE5Dd2hnWUZ3bkV1RXZvaVNPeFl2UEx4cjRWTU1RM2lPR21QS0VBKzJoUUtxc214b3dJREFRQUINCm96OHdQVEFQQmdOVkhSTUVDREFHQVFIL0FnRUJNQXNHQTFVZER3UUVBd0lDQkRBZEJnTlZIUTRFRmdRVVlFcDANCmkxc2hZcDh5N1lQTEk5MXh6L2pXWVVBd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFIZFNtUVZZT0pzdmJFR1QNCmxwdk1CcjhCL0M1cUdGQjF4N3BBZWRlOFA1TXk0MHg1QnNjTjg4ZkN3djZSVStUbDNjenQ4ZHBMc0RZaTIzR2QNCnEwSk1LT2docXdSa2w4bEZRNmY0ZUdsZGFLMGlOc3hxQkJZUVFBeHNscTV0RXRUZk4rYmdVbGUyMmhpNERjUGsNClh0UDNncGhHdzRjSXlpZ09DbWpiOVk5VnNQY0M2Rit2bmhNaWxkRVhmUEFJcWRQSnlWZFMrWWNXOXdkaXF2d28NClVsK0h2VDhyMnFSbTV0U2NReFRySEY1emdwZzZhUmRENk1qWGQwZFAydzUzazVQeUZPb0o4eE1Qd1JGeE1xazkNCmkzdm9ZcUFBNXBNZXBVR3ladllKenUrUEk2cmFJNlllc3NMcW02NEE0NlZYS0xIOEZvTnYwMEQ2Y0o5R1NwMUUNCkJmRm85L3M9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K";
71-
private static final String OP_CERT_DATA =
70+
public static final String OP_CERT_DATA =
7271
"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR4ekNDQXErZ0F3SUJBZ0lFT2lMdG1EQU5CZ2txaGtpRzl3MEJBUXNGQURDQmdURUxNQWtHQTFVRUJoTUMNClZWTXhFREFPQmdOVkJBZ1RCMDE1VTNSaGRHVXhEekFOQmdOVkJBY1RCazE1Vkc5M2JqRVhNQlVHQTFVRUNoTU8NClRYbFBjbWRoYm1sNllYUnBiMjR4R1RBWEJnTlZCQXNURUVaUFVpQlVSVk5VU1U1SElFOU9URmt4R3pBWkJnTlYNCkJBTVRFbGRsWW14dloybGpUM0JsY21GMGIzSkRRVEFlRncweE56RXlNRFV5TXpJNE1EUmFGdzB5TnpFeU1ETXkNCk16STRNRFJhTUhneEN6QUpCZ05WQkFZVEFsVlRNUkF3RGdZRFZRUUlFd2ROZVZOMFlYUmxNUTh3RFFZRFZRUUgNCkV3Wk5lVlJ2ZDI0eEZ6QVZCZ05WQkFvVERrMTVUM0puWVc1cGVtRjBhVzl1TVJrd0Z3WURWUVFMRXhCR1QxSWcNClZFVlRWRWxPUnlCUFRreFpNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHZjM1F3Z2dFaU1BMEdDU3FHU0liM0RRRUINCkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDOCs1MVNYcnpPUm8xaHYwb1doZFhnNTBCczRJc0pUSUw4ZVdZV1R6SGINCkxVcVMxQldWZllVMHJGWXZYTDBGQnh6SGdtL1lVZ0dHVkQwZEVtdVBMSXc3cEd4TS84Sm5HbGpvampnZSs5QmUNCk9rMFBKSXc3MmpPazA0a3ZOK1V6QnJodk5kRnRUQ3VnaVZDWG1ncjZLYjlIM2JpSlkraWZIMmR1OTRIamcrQ2ENCkRYZU5qZXlSRmVZQmdmRTd1cERBNGx6aXNrRVFjczVTSHJNcVB5TFViZVRrYk1aSy82bVVYazdOTGhyQ3BRNmMNCjNnVGgrSDVLaElBd0lXR2hXTEhOTGkzWm5kbWhRRW53enZMOUlDYVpHazZ3QmlxNDJsdUUxYndPdmpMVnRKOEsNCmVJWGFONnlIdXFFamNMUFBEeEhtYkZwVWlaZmgrWTk0K29RQTRMS3lGdWhOQWdNQkFBR2pUekJOTUI4R0ExVWQNCkl3UVlNQmFBRkdCS2RJdGJJV0tmTXUyRHl5UGRjYy80MW1GQU1Bc0dBMVVkRHdRRUF3SUQrREFkQmdOVkhRNEUNCkZnUVVvcFFvY0ExaVpGN042ZDhMdmoyM1Ezc0FJTVl3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUlHZFpkMVMNCkhZdFMxQnVRSnpLcSthTEVHUzQvQk01aXk2Q0oxaGpvUnpyc0Y0TEhtTmNqOE04M1RYY1JXTHJraEhtd3FFU0cNCjVpU3o0bVJnbmxxSlIxcndxZjhOUnAwU3dnVVlmbmdvdGI2dlZxVUhWZzcvdWtaRURYV2dUMThaS1BrZkp4SnoNCmRPdlpEeDhETzVhOWhQVFZKeWwzekd3ckhBaVY3Zjg1RWdIVkxsUTFqbC91eG9zSXJaMm5VZ3BFVTlzaC8xd04NCkIyYUtZVk5WQVFNZVZuVHhHU0h0WW5pOUJ1U1FDMFhZS3FCbVlHWWlwUDlnenJBd0hFTXVEeFRxcUdIRU84WVgNCjgrem1xVGJTVzQ2NkNYL2RsTFhNKzR3MFErNU1XODZBbkpzVGhEeE5mWkMrd3o5ZHNwbm9lclVsYWVyMVhiaWkNCjAwd2ZNaU81UU9uTlF3TT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=";
7372
private static final String OP_KEY_DATA =
7473
"QmFnIEF0dHJpYnV0ZXMKICAgIGZyaWVuZGx5TmFtZTogd2VibG9naWMtb3BlcmF0b3IuYWxpYXMKICAgIGxvY2FsS2V5SUQ6IDU0IDY5IDZEIDY1IDIwIDMxIDM1IDMxIDMyIDM1IDMxIDM2IDM0IDM4IDMzIDMxIDM2IDM2IApLZXkgQXR0cmlidXRlczogPE5vIEF0dHJpYnV0ZXM+Ci0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KTUlJRXBRSUJBQUtDQVFFQXZQdWRVbDY4emthTlliOUtGb1hWNE9kQWJPQ0xDVXlDL0hsbUZrOHgyeTFLa3RRVgpsWDJGTkt4V0wxeTlCUWNjeDRKdjJGSUJobFE5SFJKcmp5eU1PNlJzVFAvQ1p4cFk2STQ0SHZ2UVhqcE5EeVNNCk85b3pwTk9KTHpmbE13YTRielhSYlV3cm9JbFFsNW9LK2ltL1I5MjRpV1Bvbng5bmJ2ZUI0NFBnbWcxM2pZM3MKa1JYbUFZSHhPN3FRd09KYzRySkJFSExPVWg2ektqOGkxRzNrNUd6R1N2K3BsRjVPelM0YXdxVU9uTjRFNGZoKwpTb1NBTUNGaG9WaXh6UzR0MlozWm9VQko4TTd5L1NBbW1ScE9zQVlxdU5wYmhOVzhEcjR5MWJTZkNuaUYyamVzCmg3cWhJM0N6enc4UjVteGFWSW1YNGZtUGVQcUVBT0N5c2hib1RRSURBUUFCQW9JQkFRQ2xjYW15Mk5sMXhISTEKcHArWHhDY1BzNlBGTFhiSzl6NmRCVEtJU1dDZVBySlFoSGM0M2lCbGtwSUkrS2xKNDRZZ2EySzdBRi94VjRJQgpGNFV1WEpPUUMwdjh4Tk5PSzlTMkV2dXl0RVVnbU8ycFdoZWl0azRMK0Z6YkI1WVI2OG8vSWVCc1RRak1qQ29QCjduMjVzQjZUTGRwRi9UOURQdHp3V3FKTnFjQlJYQU9ybDExYWI2YWNVTTNjaHdXL00vemR3Rm93aDRPWDkvMzYKc2hXV2VXVERxZEh1ZVIzQXptNEthYWpyTWRMSlViV2Q1MkpUbUo0c1huWldmakgvNVZCR3dBVDFMank0MXEyRwo4NXV2d09yanl4eFF0Q010a1A1YUNzdGx2emlRZ3FKWXNDRjk5ZTBnQTEzdi90YzJxcWVZZVVpSW9xalhSZTJKCituSE1HamJCQW9HQkFOOEdFRnY2SFRUQ3RqM3N6MHl6elBwRDQwNytmbkptL01mY2Jla3FtSmlzUkNiTEJyMksKSDNHU0w3S0gyZWRsbU56NU1IQnZ0WUhjd21YMzgvaUVzS01lejBuWXU3ejA3aFVZVndsZ3JHZG9mS1lTWXVDbAp6SW9tMWhHMjZmbTJKdUc5V1NoS3dzY282SGFxMnI2U0VybXF3S29JNnI2bGc5ZFJuR0F6T2FvRkFvR0JBTmp0CkIrejYwMUI3eXc2ZTRkVUFSUjV2R0lPMmxZR2YwUTBORlVBNm1lNHUrUzkxZi92NmZESERSK3pjb0E5TGRDdjQKcmV5RkFveEJoVGdFeWlqWmNjVkFuRTIwa1VrYW1OMzV4UUdjMnpFTTJEeEU4YnpyR2FzNHd0a0tITFZwVkZCOQphaThLajBSMWU4Z0NWYS9EOWtJK1NKdVl2T3hrYTRaa2dLUFJEKytwQW9HQkFNNEtDaDhQS09CUGFwSTNMeVRMCmozaytNc2dOOGIrN1NabFRHZStwdktSL3NjNnREcU1ZOGdlNGFIeGxhWGlQc2ZPais0NUVoY2xkcS9NTWFjYVUKdjZOVG1XbTk0Mk9rWERmODdwdnBSaDJhdUYyczZ0QmtIRjBkbC9OeHF5TlpsdjVDTWhZNVMwMDNpOXZsNklUYQo2cFhCSEpGNS8zVDE4S0dCOGhnbCt3WUpBb0dBSVYvZWYweGI1SjhYTDZtc0x4dzZoaU1yajJBeEFsOTNSMTNDCjdqM1YzdnBsSmpNYXZNYmVBcjM3dStwNXljQ2ZJQUREcVljUlRFanNXU0VMaFZ0bkVLVVBKemxudk9xVnFGazgKUVRKRDJ2a1I3N3Zmd1dRZWIrUnN2ZjI3U3dIb2tmV3B0NUVWVjhBSGlrOHBwY0F0akNXUEFEbHduNklYbFBhegpnQUN6UmZrQ2dZRUFoOEZiZDNCeDRVWWR2NVo5RjFsdnFpNk9kdS9EOWtMYjMvb3p1dlhIUkQzaXE5NUFUcG5JClFVNEhRMnBpSzBkYTJnYnFML2UrQkhqYmdPK0NtbmxBT0F4VGx0RWNkelVFeHNIdWxYdFB5bWRod1RFenpRRUEKTUpGY2FRTVhGd2MxQTdvVXJkUFozRmNhdCt2RTZoUnRIRnJDMVFHeU90d3dGSGtIMXR5Q1cycz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K";
@@ -89,8 +88,8 @@ public void setUp() throws Exception {
8988
savedhandlers = TestUtils.removeConsoleHandlers(logger);
9089

9190
// Start the REST server
92-
rs = new RestServer(new TestRestConfigImpl());
93-
rs.start(container);
91+
RestServer.create(new TestRestConfigImpl());
92+
RestServer.getInstance().start(container);
9493

9594
// create the client
9695
Client c =
@@ -99,13 +98,14 @@ public void setUp() throws Exception {
9998
.register(JsonProcessingFeature.class)
10099
.build();
101100

102-
externalHttpsTarget = c.target(rs.getExternalHttpsUri());
103-
internalHttpsTarget = c.target(rs.getInternalHttpsUri());
101+
externalHttpsTarget = c.target(RestServer.getInstance().getExternalHttpsUri());
102+
internalHttpsTarget = c.target(RestServer.getInstance().getInternalHttpsUri());
104103
}
105104

106105
@After
107106
public void tearDown() throws Exception {
108-
rs.stop();
107+
RestServer.getInstance().stop();
108+
RestServer.destroy();
109109
}
110110

111111
@Test
@@ -286,6 +286,12 @@ public void testMissingAccessToken() {
286286
verifyNotAuthenticated(r);
287287
}
288288

289+
@Test
290+
public void testGetInternalCertificateAsBase64PEM() {
291+
String internalCertData = RestServer.getInstance().getInternalCertificateAsBase64PEM();
292+
assertEquals(internalCertData, RestTest.OP_CERT_DATA);
293+
}
294+
289295
private VersionModel createLatestVersion() {
290296
return new VersionModel(V1, true, "active");
291297
}
@@ -335,7 +341,7 @@ private Invocation.Builder request(WebTarget target, String uri) {
335341
return target.path(uri).request().header(HttpHeaders.AUTHORIZATION, "Bearer dummy token");
336342
}
337343

338-
private static class TestRestConfigImpl implements RestConfig {
344+
public static class TestRestConfigImpl implements RestConfig {
339345
private final int randomPort;
340346

341347
public TestRestConfigImpl() {

0 commit comments

Comments
 (0)