From 131139b75a19ab580b95fcee6d07b008eda5d7ba Mon Sep 17 00:00:00 2001 From: Yevgeny Kuznetsov Date: Tue, 27 Apr 2021 01:52:39 +0300 Subject: [PATCH] fix #3047: NPE when getting version when there is no build date * Add null check for build date before trying to parse it. Signed-off-by: Yevgeny Kuznetsov --- CHANGELOG.md | 1 + .../kubernetes/client/VersionInfo.java | 4 +++- .../client/mock/VersionInfoTest.java | 20 ++++++++++++++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a5a8c85c2e7..a3c99985cfd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ * Fix #3020: annotations should now properly have their associated values when processing CRDs from the API * Fix #3027: fix NPE when sorting events in KubernetesResourceUtil * Fix missing entry for Trigger in TektonTriggersResourceMappingProvider +* Fix #3047: NPE when getting version when there is no build date #### Improvements * Fix #2788: Support FIPS mode in kubernetes-client with BouncyCastleFipsProvider diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/VersionInfo.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/VersionInfo.java index 0ecc65afda2..b243524d5d6 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/VersionInfo.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/VersionInfo.java @@ -102,7 +102,9 @@ public Builder(VersionInfo versionInfo) { } public Builder withBuildDate(String buildDate) throws ParseException { - this.versionInfo.buildDate = new SimpleDateFormat(VersionKeys.BUILD_DATE_FORMAT).parse(buildDate); + if (buildDate != null) { + this.versionInfo.buildDate = new SimpleDateFormat(VersionKeys.BUILD_DATE_FORMAT).parse(buildDate); + } return this; } diff --git a/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/VersionInfoTest.java b/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/VersionInfoTest.java index 2469f76606d..9c39d7f5f29 100644 --- a/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/VersionInfoTest.java +++ b/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/VersionInfoTest.java @@ -25,6 +25,7 @@ import java.text.SimpleDateFormat; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; @EnableKubernetesMockClient public class VersionInfoTest { @@ -47,6 +48,23 @@ public void testClusterVersioning() throws ParseException { assertEquals("3", client.getVersion().getMajor()); assertEquals("6", client.getVersion().getMinor()); assertEquals(118, client.getVersion().getBuildDate().getYear()); - assertEquals(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").parse("2018-03-01T14:27:17Z").getTime(), client.getVersion().getBuildDate().getTime()); + assertEquals(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").parse("2018-03-01T14:27:17Z").getTime(), + client.getVersion().getBuildDate().getTime()); + } + + @Test + public void testClusterVersioningWithMissingBuildDate() { + server.expect().withPath("/version").andReturn(200, "{" + + " \"gitCommit\": \"e6301f88a8\"," + + " \"gitVersion\": \"v1.6.1+5115d708d7\"," + + " \"major\": \"3\"," + + " \"minor\": \"6\"" + + "}").always(); + + assertEquals("v1.6.1+5115d708d7", client.getVersion().getGitVersion()); + assertEquals("e6301f88a8", client.getVersion().getGitCommit()); + assertEquals("3", client.getVersion().getMajor()); + assertEquals("6", client.getVersion().getMinor()); + assertNull(client.getVersion().getBuildDate()); } }