diff options
author | HÃ¥kon Hallingstad <hakon.hallingstad@gmail.com> | 2022-11-01 08:05:20 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-01 08:05:20 +0100 |
commit | 8c79607e0b19c2996f28afd5fd1c41677d372095 (patch) | |
tree | a12b88517705ef762601c9bdce89210e4e6ce490 /node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/cores/CoresTest.java | |
parent | 99d143f7ecbc7c0e2c4d55bd325a1c3ca60b22e2 (diff) |
Revert "Revert "New cores client in node-admin""
Diffstat (limited to 'node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/cores/CoresTest.java')
-rw-r--r-- | node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/cores/CoresTest.java | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/cores/CoresTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/cores/CoresTest.java new file mode 100644 index 00000000000..b9ecbdc0837 --- /dev/null +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/configserver/cores/CoresTest.java @@ -0,0 +1,100 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.node.admin.configserver.cores; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.yahoo.config.provision.DockerImage; +import com.yahoo.config.provision.HostName; +import com.yahoo.test.json.JsonTestHelper; +import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerApi; +import com.yahoo.vespa.hosted.node.admin.configserver.ConfigServerException; +import com.yahoo.vespa.hosted.node.admin.configserver.StandardConfigServerResponse; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; + +import java.nio.file.Path; +import java.util.List; + +import static com.yahoo.yolean.Exceptions.uncheck; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +/** + * @author hakonhall + */ +class CoresTest { + private final ObjectMapper mapper = new ObjectMapper(); + private final ConfigServerApi configServerApi = mock(ConfigServerApi.class); + private final Cores cores = new CoresImpl(configServerApi); + private final HostName hostname = HostName.of("foo.com"); + private final String id = "5c987afb-347a-49ee-a0c5-bef56bbddeb0"; + private final CoreDumpMetadata metadata = new CoreDumpMetadata() + .setKernelVersion("4.18.0-372.26.1.el8_6.x86_64") + .setCpuMicrocodeVersion("0x1000065") + .setCoreDumpPath(Path.of("/data/vespa/processed-coredumps/h7641a/5c987afb-347a-49ee-a0c5-bef56bbddeb0/dump_java.core.813")) + .setDockerImage(DockerImage.fromString("us-central1-docker.pkg.dev/vespa-external-cd/vespa-cloud/vespa/cloud-tenant-rhel8:8.68.8")) + .setBinPath("/usr/bin/java") + .setVespaVersion("8.68.8") + .setBacktraceAllThreads(List.of("Attaching to core /opt/vespa/var/crash/processing/5c987afb-347a-49ee-a0c5-bef56bbddeb0/dump_java.core.813 from executable /usr/bin/java, please wait...", + "Debugger attached successfully.", + " - com.yahoo.jdisc.core.TimeoutManagerImpl$ManagerTask.run() @bci=3, line=123 (Interpreted frame)", + " - java.lang.Thread.run() @bci=11, line=833 (Interpreted frame)")) + .setBacktrace(List.of("Example", "of", "backtrace")); + + @Test + void reportOK() { + var oKResponse = new StandardConfigServerResponse(); + oKResponse.message = "OK"; + when(configServerApi.post(any(), any(), any())).thenReturn(oKResponse); + + cores.report(hostname, id, metadata); + + var pathCaptor = ArgumentCaptor.forClass(String.class); + var bodyJsonPojoCaptor = ArgumentCaptor.forClass(Object.class); + verify(configServerApi, times(1)).post(pathCaptor.capture(), bodyJsonPojoCaptor.capture(), any()); + + assertEquals("/cores/v1/report/" + hostname + "/" + id, pathCaptor.getValue()); + + assertEquals(""" + { + "backtrace": [ + "Example", + "of", + "backtrace" + ], + "backtrace_all_threads": [ + "Attaching to core /opt/vespa/var/crash/processing/5c987afb-347a-49ee-a0c5-bef56bbddeb0/dump_java.core.813 from executable /usr/bin/java, please wait...", + "Debugger attached successfully.", + " - com.yahoo.jdisc.core.TimeoutManagerImpl$ManagerTask.run() @bci=3, line=123 (Interpreted frame)", + " - java.lang.Thread.run() @bci=11, line=833 (Interpreted frame)" + ], + "bin_path": "/usr/bin/java", + "coredump_path": "/data/vespa/processed-coredumps/h7641a/5c987afb-347a-49ee-a0c5-bef56bbddeb0/dump_java.core.813", + "cpu_microcode_version": "0x1000065", + "docker_image": "us-central1-docker.pkg.dev/vespa-external-cd/vespa-cloud/vespa/cloud-tenant-rhel8:8.68.8", + "kernel_version": "4.18.0-372.26.1.el8_6.x86_64", + "vespa_version": "8.68.8" + }""", + JsonTestHelper.normalize(uncheck(() -> mapper.writeValueAsString(bodyJsonPojoCaptor.getValue())))); + } + + @Test + void reportFails() { + var response = new StandardConfigServerResponse(); + response.errorCode = "503"; + response.message = "error detail"; + when(configServerApi.post(any(), any(), any())).thenReturn(response); + + assertThrows(ConfigServerException.class, + () -> cores.report(hostname, "abcde-1234", metadata), + "Failed to report core dump at Optional[/data/vespa/processed-coredumps/h7641a/5c987afb-347a-49ee-a0c5-bef56bbddeb0/dump_java.core.813]: error detail 503"); + + var pathCaptor = ArgumentCaptor.forClass(String.class); + var bodyJsonPojoCaptor = ArgumentCaptor.forClass(Object.class); + verify(configServerApi).post(pathCaptor.capture(), bodyJsonPojoCaptor.capture(), any()); + } +}
\ No newline at end of file |