Skip to content

Commit 2839a11

Browse files
Mikk BachmannMikk Bachmann
authored andcommitted
feat: As a Security Server Administrator I want the diagnostics information available for global configuration and TSA to be improved so that I can more easily figure out issues with it
tests refs: XRDDEV-2921
1 parent f19a6a7 commit 2839a11

File tree

18 files changed

+141
-128
lines changed

18 files changed

+141
-128
lines changed

src/addons/messagelog/messagelog-addon/src/test/java/org/niis/xroad/proxy/core/messagelog/AbstractMessageLogTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ static void assertMessageRecord(Object o, String queryId) {
185185
static Object waitForMessageInTaskQueue() throws Exception {
186186
assertTrue(TestTaskQueue.waitForMessage());
187187

188-
Object message = TestTaskQueue.getLastMessage();
188+
Object message = TestTaskQueue.getLastTimestampResult();
189189
assertNotNull("Did not get message from task queue", message);
190190

191191
return message;

src/addons/messagelog/messagelog-addon/src/test/java/org/niis/xroad/proxy/core/messagelog/DummyTSP.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,13 @@
3131

3232
final class DummyTSP {
3333

34+
public static final String URL = "src/test/resources/tsp.response";
35+
3436
private DummyTSP() {
3537
}
3638

3739
static AbstractTimestampRequest.TsRequest makeRequest(TimeStampRequest req) throws Exception {
38-
return new AbstractTimestampRequest.TsRequest(new FileInputStream("src/test/resources/tsp.response"),
39-
"src/test/resources/tsp.response");
40+
return new AbstractTimestampRequest.TsRequest(new FileInputStream(URL), URL);
4041
}
4142

4243
}

src/addons/messagelog/messagelog-addon/src/test/java/org/niis/xroad/proxy/core/messagelog/MessageLogTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import org.junit.Test;
6464
import org.junit.runner.RunWith;
6565
import org.junit.runners.Parameterized;
66+
import org.niis.xroad.common.core.exception.ErrorCode;
6667
import org.niis.xroad.proxy.core.messagelog.Timestamper.TimestampFailed;
6768
import org.niis.xroad.proxy.core.messagelog.Timestamper.TimestampSucceeded;
6869

@@ -469,7 +470,7 @@ public void timestampNoTspUrls() throws Exception {
469470
log.trace("timestampNoTspUrls()");
470471

471472
serverConfProvider.setServerConfProvider(new EmptyServerConf());
472-
thrown.expectError(X_MLOG_TIMESTAMPER_FAILED);
473+
thrown.expectError(ErrorCode.NO_TIMESTAMPING_PROVIDER_FOUND.code());
473474

474475
log(createMessage(), createSignature());
475476
}

src/addons/messagelog/messagelog-addon/src/test/java/org/niis/xroad/proxy/core/messagelog/TestTaskQueue.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class TestTaskQueue extends TaskQueue {
4141
static List<Integer> successfulMessageSizes = new ArrayList<>();
4242

4343
private static CountDownLatch gate = new CountDownLatch(1);
44-
private static Object lastMessage;
44+
private static Timestamper.TimestampResult lastTimestampResult;
4545

4646
// Countdownlatch for waiting for next timestamp record save.
4747
private static CountDownLatch timestampSavedLatch = new CountDownLatch(1);
@@ -74,8 +74,8 @@ static boolean waitForMessage() throws Exception {
7474
}
7575
}
7676

77-
static Object getLastMessage() {
78-
return lastMessage;
77+
static Object getLastTimestampResult() {
78+
return lastTimestampResult;
7979
}
8080

8181
/**
@@ -109,24 +109,24 @@ protected void saveTimestampRecord(TimestampSucceeded message) {
109109
}
110110

111111
@Override
112-
protected void handleTimestampSucceeded(TimestampSucceeded message) {
112+
protected void handleTimestampSucceeded(TimestampSucceeded timestampSucceededResult) {
113113
log.trace("handleTimestampSucceeded()");
114114

115115
try {
116-
lastMessage = message;
117-
super.handleTimestampSucceeded(message);
116+
lastTimestampResult = timestampSucceededResult;
117+
super.handleTimestampSucceeded(timestampSucceededResult);
118118
} finally {
119119
gate.countDown();
120120
}
121121
}
122122

123123
@Override
124-
protected void handleTimestampFailed(TimestampFailed message) {
124+
protected void handleTimestampFailed(TimestampFailed timestampFailedResult) {
125125
log.info("handleTimestampFailed");
126126

127127
try {
128-
lastMessage = message;
129-
super.handleTimestampFailed(message);
128+
lastTimestampResult = timestampFailedResult;
129+
super.handleTimestampFailed(timestampFailedResult);
130130
} finally {
131131
gate.countDown();
132132
}

src/addons/messagelog/messagelog-addon/src/test/java/org/niis/xroad/proxy/core/messagelog/TestTimestamperWorker.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,15 @@
2626
package org.niis.xroad.proxy.core.messagelog;
2727

2828
import lombok.SneakyThrows;
29-
import org.bouncycastle.cms.CMSException;
30-
import org.bouncycastle.operator.OperatorCreationException;
3129
import org.bouncycastle.tsp.TimeStampRequest;
3230
import org.bouncycastle.tsp.TimeStampResponse;
3331
import org.bouncycastle.tsp.TimeStampToken;
3432
import org.niis.xroad.globalconf.GlobalConfProvider;
3533
import org.niis.xroad.globalconf.impl.signature.TimestampVerifier;
3634

37-
import java.io.IOException;
38-
import java.security.cert.CertificateEncodingException;
35+
import java.util.HashMap;
3936
import java.util.List;
37+
import java.util.Map;
4038

4139
import static org.niis.xroad.proxy.core.messagelog.TimestamperUtil.getTimestampResponse;
4240

@@ -65,6 +63,7 @@ protected AbstractTimestampRequest createSingleTimestampRequest(Long logRecord)
6563
@Override
6664
@SneakyThrows
6765
protected Timestamper.TimestampResult makeTsRequest(TimeStampRequest tsRequest, List<String> tspUrls) {
66+
Map<String, Exception> errorsByUrl = new HashMap<>();
6867
synchronized (lock()) {
6968
if (shouldFail) {
7069
shouldFail = false;
@@ -77,12 +76,13 @@ protected Timestamper.TimestampResult makeTsRequest(TimeStampRequest tsRequest,
7776
TimeStampResponse tsResponse = getTimestampResponse(req.getInputStream());
7877
verify(tsRequest, tsResponse);
7978

80-
return result(tsResponse, req.getUrl());
79+
Timestamper.TimestampResult result = result(tsResponse, req.getUrl());
80+
result.setErrorsByUrl(errorsByUrl);
81+
return result;
8182
}
8283

8384
@Override
84-
protected void verify(TimeStampRequest request, TimeStampResponse response)
85-
throws CertificateEncodingException, IOException, OperatorCreationException, CMSException {
85+
protected void verify(TimeStampRequest request, TimeStampResponse response) {
8686
// do not validate against request
8787

8888
TimeStampToken token = response.getTimeStampToken();
@@ -97,6 +97,7 @@ protected AbstractTimestampRequest createBatchTimestampRequest(Long[] logRecords
9797
@Override
9898
@SneakyThrows
9999
protected Timestamper.TimestampResult makeTsRequest(TimeStampRequest tsRequest, List<String> tspUrls) {
100+
Map<String, Exception> errorsByUrl = new HashMap<>();
100101
synchronized (lock()) {
101102
if (shouldFail) {
102103
shouldFail = false;
@@ -109,12 +110,13 @@ protected Timestamper.TimestampResult makeTsRequest(TimeStampRequest tsRequest,
109110
TimeStampResponse tsResponse = getTimestampResponse(req.getInputStream());
110111
verify(tsRequest, tsResponse);
111112

112-
return result(tsResponse, req.getUrl());
113+
Timestamper.TimestampResult result = result(tsResponse, req.getUrl());
114+
result.setErrorsByUrl(errorsByUrl);
115+
return result;
113116
}
114117

115118
@Override
116-
protected void verify(TimeStampRequest request, TimeStampResponse response)
117-
throws CertificateEncodingException, IOException, OperatorCreationException, CMSException {
119+
protected void verify(TimeStampRequest request, TimeStampResponse response) {
118120
// do not validate against request
119121

120122
TimeStampToken token = response.getTimeStampToken();

src/common/common-core/src/test/java/org/niis/xroad/common/core/exception/XrdRuntimeExceptionTest.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.junit.jupiter.api.Test;
3232

3333
import java.io.IOException;
34+
import java.net.MalformedURLException;
3435
import java.net.UnknownHostException;
3536

3637
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -345,11 +346,24 @@ void shouldTranslateIOExceptionToIoError() {
345346
}
346347

347348
@Test
348-
void shouldTranslateNetworkExceptionToNetworkError() {
349+
void shouldTranslateUnknownHostExceptionToUnknownHost() {
349350
UnknownHostException networkException = new UnknownHostException("host not found");
350351

351352
XrdRuntimeException result = XrdRuntimeException.systemException(networkException);
352353

354+
assertNotNull(result);
355+
assertEquals(ExceptionCategory.SYSTEM, result.getCategory());
356+
assertEquals(ErrorCode.UNKNOWN_HOST.code(), result.getCode());
357+
assertEquals(networkException, result.getCause());
358+
assertTrue(result.toString().contains("unknown_host"));
359+
}
360+
361+
@Test
362+
void shouldTranslateNetworkExceptionToNetworkError() {
363+
MalformedURLException networkException = new MalformedURLException("Malformed URL");
364+
365+
XrdRuntimeException result = XrdRuntimeException.systemException(networkException);
366+
353367
assertNotNull(result);
354368
assertEquals(ExceptionCategory.SYSTEM, result.getCategory());
355369
assertEquals(ErrorCode.NETWORK_ERROR.code(), result.getCode());

src/common/common-test/src/main/java/ee/ria/xroad/common/ExpectedCodedException.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.junit.rules.TestRule;
3030
import org.junit.runner.Description;
3131
import org.junit.runners.model.Statement;
32+
import org.niis.xroad.common.core.exception.XrdRuntimeException;
3233

3334
import static org.junit.Assert.assertEquals;
3435
import static org.junit.Assert.assertTrue;
@@ -101,6 +102,20 @@ private class ExpectedStatement extends Statement {
101102
public void evaluate() throws Throwable {
102103
try {
103104
statement.evaluate();
105+
} catch (XrdRuntimeException e) {
106+
if (expected == null) {
107+
throw e;
108+
}
109+
110+
if (expectedSuffix) {
111+
assertTrue("XrdRuntimeException with error code suffix "
112+
+ expected, e.getCode().endsWith(expected));
113+
} else {
114+
assertEquals("XrdRuntimeException with error code",
115+
expected, e.getCode());
116+
}
117+
118+
return;
104119
} catch (CodedException e) {
105120
if (expected == null) {
106121
throw e;

src/lib/globalconf-core/src/test/java/org/niis/xroad/globalconf/status/OcspResponderStatusSerializationTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
*/
2727
package org.niis.xroad.globalconf.status;
2828

29+
import ee.ria.xroad.common.DiagnosticStatus;
30+
import ee.ria.xroad.common.DiagnosticsStatus;
2931
import ee.ria.xroad.common.util.JsonUtils;
3032

3133
import lombok.extern.slf4j.Slf4j;
@@ -42,7 +44,7 @@ void serializeAndDeserializeCertificationServiceDiagnostics() throws IOException
4244
CertificationServiceDiagnostics certificationServiceDiagnostics = new CertificationServiceDiagnostics();
4345
String name = "name";
4446
String url = "url";
45-
OcspResponderStatus ocspResponderStatus = new OcspResponderStatus(0, url, null, null);
47+
OcspResponderStatus ocspResponderStatus = new OcspResponderStatus(DiagnosticStatus.OK, url, null, null);
4648
CertificationServiceStatus certificationServiceStatus = new CertificationServiceStatus(name);
4749
certificationServiceStatus.getOcspResponderStatusMap().put(url, ocspResponderStatus);
4850
certificationServiceDiagnostics.getCertificationServiceStatusMap().put(name, certificationServiceStatus);
@@ -59,7 +61,7 @@ void serializeAndDeserializeCertificationServiceDiagnostics() throws IOException
5961

6062
@Test
6163
void serializeAndDeserializeDiagnosticsStatus() throws IOException {
62-
DiagnosticsStatus diagnosticsStatus = new DiagnosticsStatus(0, null, null, "desc");
64+
DiagnosticsStatus diagnosticsStatus = new DiagnosticsStatus(DiagnosticStatus.OK, null, "desc");
6365

6466
byte[] bytesOut = JsonUtils.getObjectWriter().writeValueAsBytes(diagnosticsStatus);
6567

src/lib/globalconf-impl/src/test/java/org/niis/xroad/globalconf/impl/signature/TimestampVerifierTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.junit.BeforeClass;
3838
import org.junit.Rule;
3939
import org.junit.Test;
40+
import org.niis.xroad.common.core.exception.ErrorCode;
4041
import org.niis.xroad.globalconf.GlobalConfProvider;
4142
import org.niis.xroad.test.globalconf.TestGlobalConfImpl;
4243

@@ -105,7 +106,7 @@ public void hashMismatch() throws Exception {
105106
*/
106107
@Test
107108
public void wrongCertificate() throws Exception {
108-
thrown.expectError(ErrorCodes.X_INTERNAL_ERROR);
109+
thrown.expectError(ErrorCode.TSP_CERTIFICATE_NOT_FOUND.code());
109110
TimeStampToken token = getTimestampFromFile("valid");
110111
byte[] stampedData = getBytesFromFile("stamped-data");
111112
List<X509Certificate> tspCerts =
@@ -120,7 +121,7 @@ public void wrongCertificate() throws Exception {
120121
*/
121122
@Test
122123
public void invalidSignature() throws Exception {
123-
thrown.expectError(ErrorCodes.X_TIMESTAMP_VALIDATION);
124+
thrown.expectError(ErrorCode.TIMESTAMP_SIGNER_VERIFICATION_FAILED.code());
124125
TimeStampToken token = getTimestampFromFile("invalid-signature");
125126
byte[] stampedData = getBytesFromFile("stamped-data");
126127
List<X509Certificate> tspCerts = globalConfProvider.getTspCertificates();

src/security-server/admin-service/application/src/test/java/org/niis/xroad/securityserver/restapi/converter/GlobalConfDiagnosticConverterTest.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,11 @@
2626
*/
2727
package org.niis.xroad.securityserver.restapi.converter;
2828

29-
import ee.ria.xroad.common.DiagnosticsErrorCodes;
29+
import ee.ria.xroad.common.DiagnosticStatus;
30+
import ee.ria.xroad.common.DiagnosticsStatus;
3031

3132
import org.junit.Before;
3233
import org.junit.Test;
33-
import org.niis.xroad.globalconf.status.DiagnosticsStatus;
34-
import org.niis.xroad.securityserver.restapi.openapi.model.ConfigurationStatusDto;
3534
import org.niis.xroad.securityserver.restapi.openapi.model.DiagnosticStatusClassDto;
3635
import org.niis.xroad.securityserver.restapi.openapi.model.GlobalConfDiagnosticsDto;
3736

@@ -56,9 +55,8 @@ public void setup() {
5655
@Test
5756
public void convertSingleGlobalConfDiagnostics() {
5857
GlobalConfDiagnosticsDto globalConfDiagnostics = globalConfDiagnosticConverter.convert(new DiagnosticsStatus(
59-
DiagnosticsErrorCodes.RETURN_SUCCESS, PREVIOUS_UPDATE, NEXT_UPDATE));
58+
DiagnosticStatus.OK, PREVIOUS_UPDATE, NEXT_UPDATE));
6059

61-
assertEquals(ConfigurationStatusDto.SUCCESS, globalConfDiagnostics.getStatusCode());
6260
assertEquals(DiagnosticStatusClassDto.OK, globalConfDiagnostics.getStatusClass());
6361
assertEquals(PREVIOUS_UPDATE, globalConfDiagnostics.getPrevUpdateAt());
6462
assertEquals(NEXT_UPDATE, globalConfDiagnostics.getNextUpdateAt());

0 commit comments

Comments
 (0)