From 2c35fad88b58b8c53da72b66f0ebe93453d510db Mon Sep 17 00:00:00 2001 From: Kumar Ashish Date: Fri, 28 Jun 2019 15:25:33 -0700 Subject: [PATCH 1/5] Add VPC-SC positive and negative integration tests. --- .../google-cloud-websecurityscanner/pom.xml | 6 + .../it/v1beta/VpcNegativeTest.java | 140 +++++++++ .../it/v1beta/VpcPositiveTest.java | 269 ++++++++++++++++++ 3 files changed, 415 insertions(+) create mode 100644 google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcNegativeTest.java create mode 100644 google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcPositiveTest.java diff --git a/google-cloud-clients/google-cloud-websecurityscanner/pom.xml b/google-cloud-clients/google-cloud-websecurityscanner/pom.xml index a3f15d2c1214..69d66d88679c 100644 --- a/google-cloud-clients/google-cloud-websecurityscanner/pom.xml +++ b/google-cloud-clients/google-cloud-websecurityscanner/pom.xml @@ -54,6 +54,12 @@ testlib test + + + com.google.truth + truth + test + diff --git a/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcNegativeTest.java b/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcNegativeTest.java new file mode 100644 index 000000000000..709953dd0e9c --- /dev/null +++ b/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcNegativeTest.java @@ -0,0 +1,140 @@ +/* + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.cloud.websecurityscanner.it.v1beta; + +import static com.google.common.truth.Truth.assertWithMessage; +import static org.junit.Assert.fail; +import static org.junit.Assume.assumeTrue; + +import com.google.api.gax.core.FixedCredentialsProvider; +import com.google.auth.oauth2.GoogleCredentials; +import com.google.cloud.websecurityscanner.v1beta.CreateScanConfigRequest; +import com.google.cloud.websecurityscanner.v1beta.ListScanConfigsRequest; +import com.google.cloud.websecurityscanner.v1beta.ProjectName; +import com.google.cloud.websecurityscanner.v1beta.ScanConfig; +import com.google.cloud.websecurityscanner.v1beta.WebSecurityScannerClient; +import com.google.cloud.websecurityscanner.v1beta.WebSecurityScannerClient.ListScanConfigsPagedResponse; +import com.google.cloud.websecurityscanner.v1beta.WebSecurityScannerSettings; +import com.google.common.collect.Lists; +import java.io.FileInputStream; +import java.io.IOException; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Negative Integration tests for VPC-SC. + */ +@RunWith(JUnit4.class) +public class VpcNegativeTest { + + private static final String IN_VPCSC_GOOGLE_CLOUD_TEST_ENV = "GOOGLE_CLOUD_TESTS_IN_VPCSC"; + private static final String OUT_VPCSC_PROJECT_ENV = + "GOOGLE_CLOUD_TESTS_WEB_SECURITY_SCANNER_OUTSIDE_VPC_PROJECT"; + private static final String OUT_VPCSC_HOSTNAME_ENV = + "GOOGLE_CLOUD_TESTS_WEB_SECURITY_SCANNER_OUTSIDE_VPC_HOSTNAME"; + private static final String OUT_VPCSC_GOOGLE_CREDENTIAL_ENV = + "GOOGLE_CLOUD_TESTS_WEB_SECURITY_SCANNER_OUTSIDE_VPC_CREDENTIALS"; + private static final String GOOGLE_API_CLOUD_PLATFORM_LINK = + "https://www.googleapis.com/auth/cloud-platform"; + + private static final String IN_VPCSC_TEST = System.getenv(IN_VPCSC_GOOGLE_CLOUD_TEST_ENV); + private static final String OUT_VPCSC_PROJECT = System.getenv(OUT_VPCSC_PROJECT_ENV); + private static final String OUT_VPCSC_HOSTNAME = System.getenv(OUT_VPCSC_HOSTNAME_ENV); + private static final String OUT_VPCSC_GOOGLE_CREDENTIAL = + System.getenv(OUT_VPCSC_GOOGLE_CREDENTIAL_ENV); + + private String testScanConfigCreationDisplayName; + + @BeforeClass + public static void setUpClass() { + + assumeTrue( + "To run tests, GOOGLE_CLOUD_TESTS_IN_VPCSC environment variable needs to be set to true", + IN_VPCSC_TEST != null && IN_VPCSC_TEST.equalsIgnoreCase("true")); + + assertWithMessage(OUT_VPCSC_PROJECT_ENV + " must be set to project that resides outside VPCSC") + .that(OUT_VPCSC_PROJECT) + .isNotEmpty(); + + assertWithMessage(OUT_VPCSC_HOSTNAME_ENV + " must be set to host that resides outside VPCSC") + .that(OUT_VPCSC_HOSTNAME) + .isNotEmpty(); + + assertWithMessage( + OUT_VPCSC_GOOGLE_CREDENTIAL_ENV + + " must be set to google application credentials that resides outside VPCSC") + .that(OUT_VPCSC_GOOGLE_CREDENTIAL) + .isNotEmpty(); + } + + @Before + public void setup() { + ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("America/Los_Angeles")); + String currentTime = DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(zonedDateTime); + testScanConfigCreationDisplayName = "vpcsc-neg-test" + currentTime + "-0"; + } + + private WebSecurityScannerSettings getWssSettingWithCredentials() throws IOException { + GoogleCredentials credentials = + GoogleCredentials.fromStream(new FileInputStream(OUT_VPCSC_GOOGLE_CREDENTIAL)) + .createScoped(Lists.newArrayList(GOOGLE_API_CLOUD_PLATFORM_LINK)); + return WebSecurityScannerSettings.newBuilder() + .setCredentialsProvider(FixedCredentialsProvider.create(credentials)) + .build(); + } + + @Test + public void testScanConfigCreation() throws IOException { + WebSecurityScannerSettings wssSetting = getWssSettingWithCredentials(); + final String formattedParent = ProjectName.format(OUT_VPCSC_PROJECT); + try (WebSecurityScannerClient wssClient = WebSecurityScannerClient.create(wssSetting)) { + ScanConfig scanConfig = + ScanConfig.newBuilder() + .addAllStartingUrls(Lists.newArrayList(OUT_VPCSC_HOSTNAME)) + .setDisplayName(testScanConfigCreationDisplayName) + .build(); + CreateScanConfigRequest request = + CreateScanConfigRequest.newBuilder() + .setParent(formattedParent) + .setScanConfig(scanConfig) + .build(); + + ScanConfig responseScanConfig = wssClient.createScanConfig(request); + fail("Exception must occur for non-accessible project"); + } catch (Exception e) { + } + } + + @Test + public void testScanConfigList() throws IOException { + // try to get the list of scan configs - it must fail + WebSecurityScannerSettings wssSetting = getWssSettingWithCredentials(); + final String formattedParent = ProjectName.format(OUT_VPCSC_PROJECT); + try (WebSecurityScannerClient wssClient = WebSecurityScannerClient.create(wssSetting)) { + ListScanConfigsRequest lscRequest = + ListScanConfigsRequest.newBuilder().setParent(formattedParent).build(); + ListScanConfigsPagedResponse scanConfigsList = wssClient.listScanConfigs(lscRequest); + fail("Exception must occur for non-acceessible project scan-configs"); + } catch (Exception e) { + } + } +} diff --git a/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcPositiveTest.java b/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcPositiveTest.java new file mode 100644 index 000000000000..c078fc4452e2 --- /dev/null +++ b/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcPositiveTest.java @@ -0,0 +1,269 @@ +/* + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.cloud.websecurityscanner.it.v1beta; + +import static com.google.common.truth.Truth.assertWithMessage; +import static org.junit.Assert.fail; +import static org.junit.Assume.assumeTrue; + +import com.google.api.gax.core.FixedCredentialsProvider; +import com.google.api.gax.rpc.NotFoundException; +import com.google.auth.oauth2.GoogleCredentials; +import com.google.cloud.websecurityscanner.v1beta.CreateScanConfigRequest; +import com.google.cloud.websecurityscanner.v1beta.DeleteScanConfigRequest; +import com.google.cloud.websecurityscanner.v1beta.GetScanConfigRequest; +import com.google.cloud.websecurityscanner.v1beta.ListScanConfigsRequest; +import com.google.cloud.websecurityscanner.v1beta.ProjectName; +import com.google.cloud.websecurityscanner.v1beta.ScanConfig; +import com.google.cloud.websecurityscanner.v1beta.ScanRun; +import com.google.cloud.websecurityscanner.v1beta.ScanRun.ResultState; +import com.google.cloud.websecurityscanner.v1beta.StartScanRunRequest; +import com.google.cloud.websecurityscanner.v1beta.StopScanRunRequest; +import com.google.cloud.websecurityscanner.v1beta.WebSecurityScannerClient; +import com.google.cloud.websecurityscanner.v1beta.WebSecurityScannerSettings; +import com.google.common.collect.Lists; +import java.io.FileInputStream; +import java.io.IOException; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Positive Integration Tests for VPC-SC + */ +@RunWith(JUnit4.class) +public class VpcPositiveTest { + private static final String IN_VPCSC_GOOGLE_CLOUD_TEST_ENV = "GOOGLE_CLOUD_TESTS_IN_VPCSC"; + private static final String IN_VPCSC_PROJECT_ENV = + "GOOGLE_CLOUD_TESTS_WEB_SECURITY_SCANNER_INSIDE_VPC_PROJECT"; + private static final String IN_VPCSC_HOSTNAME_ENV = + "GOOGLE_CLOUD_TESTS_WEB_SECURITY_SCANNER_INSIDE_VPC_HOSTNAME"; + private static final String IN_VPCSC_GOOGLE_CREDENTIAL_ENV = + "GOOGLE_CLOUD_TESTS_WEB_SECURITY_SCANNER_INSIDE_VPC_CREDENTIALS"; + private static final String GOOGLE_CREDENTIAL_DEFAULT_ENV = "GOOGLE_APPLICATION_CREDENTIALS"; + private static final String GOOGLE_API_CLOUD_PLATFORM_LINK = + "https://www.googleapis.com/auth/cloud-platform"; + + private static final String IN_VPCSC_TEST = System.getenv(IN_VPCSC_GOOGLE_CLOUD_TEST_ENV); + private static final String IN_VPCSC_PROJECT = System.getenv(IN_VPCSC_PROJECT_ENV); + private static final String IN_VPCSC_HOSTNAME = System.getenv(IN_VPCSC_HOSTNAME_ENV); + private static final String IN_VPCSC_GOOGLE_CREDENTIAL = + System.getenv(IN_VPCSC_GOOGLE_CREDENTIAL_ENV); + + private String test0DisplayName; + private String test1DisplayName; + + @BeforeClass + public static void setUpClass() { + assumeTrue( + "To run tests, GOOGLE_CLOUD_TESTS_IN_VPCSC environment variable needs to be set to true", + IN_VPCSC_TEST != null && IN_VPCSC_TEST.equalsIgnoreCase("true")); + + assertWithMessage(IN_VPCSC_PROJECT_ENV + " must be set to project that resides inside VPCSC") + .that(IN_VPCSC_PROJECT) + .isNotEmpty(); + + assertWithMessage(IN_VPCSC_HOSTNAME_ENV + " must be set to host that resides inside VPCSC") + .that(IN_VPCSC_HOSTNAME) + .isNotEmpty(); + + assertWithMessage( + IN_VPCSC_GOOGLE_CREDENTIAL_ENV + + " must be set to google application credentials that resides inside VPCSC") + .that(IN_VPCSC_GOOGLE_CREDENTIAL) + .isNotEmpty(); + + assertWithMessage( + GOOGLE_CREDENTIAL_DEFAULT_ENV + + " must be set to google application credentials that resides inside VPCSC") + .that(System.getenv(GOOGLE_CREDENTIAL_DEFAULT_ENV)) + .isNotEmpty(); + } + + @Before + public void setUp() { + ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("America/Los_Angeles")); + String currentTime = DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(zonedDateTime); + test0DisplayName = "vpcsctest-" + currentTime + "-0"; + test1DisplayName = "vpcsctest-" + currentTime + "-1"; + } + + private WebSecurityScannerSettings getWssSettingWithCredentials() throws IOException { + GoogleCredentials credentials = + GoogleCredentials.fromStream(new FileInputStream(IN_VPCSC_GOOGLE_CREDENTIAL)) + .createScoped(Lists.newArrayList(GOOGLE_API_CLOUD_PLATFORM_LINK)); + return WebSecurityScannerSettings.newBuilder() + .setCredentialsProvider(FixedCredentialsProvider.create(credentials)) + .build(); + } + + private WebSecurityScannerSettings getWssSettingWithoutCredentials() throws IOException { + // If google-credentials is not passed explicitly then google apis uses the authentication + // credentials provided in environment variable GOOGLE_APPLICATION_CREDENTIALS is used + return WebSecurityScannerSettings.newBuilder().build(); + } + + @Test + public void test0() throws IOException { + try (WebSecurityScannerClient wssClient = + WebSecurityScannerClient.create(getWssSettingWithoutCredentials())) { + test(wssClient, test0DisplayName); + } + } + + @Test + public void test1() throws IOException { + try (WebSecurityScannerClient wssClient = + WebSecurityScannerClient.create(getWssSettingWithCredentials())) { + test(wssClient, test1DisplayName); + } + } + + private void test(final WebSecurityScannerClient wssClient, final String displayName) { + // This test performs following steps: + // 0. Create scan-config + // 1. Make sure that created scan-config is present + // 2. Start scan run on created scan-config + // 3. Make sure that created scan-run is present. + // 5. Stop the scan-run + // 6. Make sure that scan-run is stopped + // 7. Delete scan-config + // 8. Make sure that deleted scan-config is not present. + + final String formattedParent = ProjectName.format(IN_VPCSC_PROJECT); + + class TestResource implements AutoCloseable { + private WebSecurityScannerClient wssClient; + private final String displayName; + private ScanConfig createdScanConfig; + private ScanRun startedScanRun; + + TestResource(WebSecurityScannerClient wssClient, String displayName) { + this.wssClient = wssClient; + this.displayName = displayName; + } + + ScanConfig createScanConfig() { + ScanConfig scanConfig = + ScanConfig.newBuilder() + .addAllStartingUrls(Lists.newArrayList(IN_VPCSC_HOSTNAME)) + .setDisplayName(displayName) + .build(); + CreateScanConfigRequest request = + CreateScanConfigRequest.newBuilder() + .setParent(formattedParent) + .setScanConfig(scanConfig) + .build(); + createdScanConfig = wssClient.createScanConfig(request); + return createdScanConfig; + } + + void deleteScanConfig() { + DeleteScanConfigRequest deleteScanConfigRequest = + DeleteScanConfigRequest.newBuilder().setName(createdScanConfig.getName()).build(); + wssClient.deleteScanConfig(deleteScanConfigRequest); + createdScanConfig = null; + } + + ScanRun startScanRun() { + StartScanRunRequest startScanRunRequest = + StartScanRunRequest.newBuilder().setName(createdScanConfig.getName()).build(); + startedScanRun = wssClient.startScanRun(startScanRunRequest); + return startedScanRun; + } + + ScanRun stopScanRun() { + StopScanRunRequest stopScanRunRequest = + StopScanRunRequest.newBuilder().setName(startedScanRun.getName()).build(); + ScanRun stoppedScanRun = wssClient.stopScanRun(stopScanRunRequest); + startedScanRun = null; + return stoppedScanRun; + } + + @Override + public void close() { + if (startedScanRun != null) { + stopScanRun(); + startedScanRun = null; + } + + if (createdScanConfig != null) { + deleteScanConfig(); + createdScanConfig = null; + } + } + } + + try (TestResource testResource = new TestResource(wssClient, displayName)) { + + ScanConfig responseScanConfig = testResource.createScanConfig(); + assertWithMessage("Display name is response must be equal to display name in request") + .that(responseScanConfig.getDisplayName()) + .matches(displayName); + + // Make sure that created scan config is present + GetScanConfigRequest scanConfigRequest = + GetScanConfigRequest.newBuilder().setName(responseScanConfig.getName()).build(); + ScanConfig obtainedScanConfig = wssClient.getScanConfig(scanConfigRequest); + assertWithMessage("Scan-Config name must be equal") + .that(obtainedScanConfig.getName()) + .matches(responseScanConfig.getName()); + + ListScanConfigsRequest lscRequest = + ListScanConfigsRequest.newBuilder().setParent(formattedParent).build(); + boolean oneDisplayNameMatches = false; + for (ScanConfig sc : wssClient.listScanConfigs(lscRequest).iterateAll()) { + // since display name is never null so object equality can be used + if (displayName.equals(sc.getDisplayName())) { + oneDisplayNameMatches = true; + break; + } + } + assertWithMessage("One scan-config with " + displayName + " must be present") + .that(oneDisplayNameMatches) + .isTrue(); + + ScanRun scanRunResponse = testResource.startScanRun(); + assertWithMessage("Scan-run name must not be empty") + .that(scanRunResponse.getName()) + .isNotEmpty(); + assertWithMessage("Scan-run state must not be KILLED") + .that(scanRunResponse.getResultState()) + .isNotEqualTo(ResultState.KILLED); + + ScanRun stoppedScanRun = testResource.stopScanRun(); + assertWithMessage("Result state must be killed") + .that(stoppedScanRun.getResultState()) + .isEqualTo(ResultState.KILLED); + + testResource.deleteScanConfig(); + + // make sure that deleted scan-config do not exist + GetScanConfigRequest getScanConfigRequest = + GetScanConfigRequest.newBuilder().setName(responseScanConfig.getName()).build(); + try { + ScanConfig deletedScanConfig = wssClient.getScanConfig(getScanConfigRequest); + fail("NotFoundException must be throw as scan-config must already be deleted"); + } catch (NotFoundException nfe) { + } + } + } +} From efee09a16afdae45c82b9a579fb63cbf125d41fd Mon Sep 17 00:00:00 2001 From: Kumar Ashish Date: Tue, 9 Jul 2019 15:46:18 -0700 Subject: [PATCH 2/5] Change code for java 7 and reformatted code. --- .../google-cloud-websecurityscanner/pom.xml | 10 +- .../it/v1beta/VpcNegativeTest.java | 61 ++++++----- .../it/v1beta/VpcPositiveTest.java | 101 +++++++++--------- 3 files changed, 88 insertions(+), 84 deletions(-) diff --git a/google-cloud-clients/google-cloud-websecurityscanner/pom.xml b/google-cloud-clients/google-cloud-websecurityscanner/pom.xml index dd5f9e1f16f7..7ffce4dc97d7 100644 --- a/google-cloud-clients/google-cloud-websecurityscanner/pom.xml +++ b/google-cloud-clients/google-cloud-websecurityscanner/pom.xml @@ -14,9 +14,6 @@ google-cloud-clients 0.99.1-alpha-SNAPSHOT - - google-cloud-websecurityscanner - ${project.groupId} @@ -54,10 +51,11 @@ testlib test - + - com.google.truth - truth + joda-time + joda-time + 2.10.3 test diff --git a/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcNegativeTest.java b/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcNegativeTest.java index 709953dd0e9c..2733879ba665 100644 --- a/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcNegativeTest.java +++ b/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcNegativeTest.java @@ -13,9 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.google.cloud.websecurityscanner.it.v1beta; -import static com.google.common.truth.Truth.assertWithMessage; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.junit.Assume.assumeTrue; @@ -31,28 +32,26 @@ import com.google.common.collect.Lists; import java.io.FileInputStream; import java.io.IOException; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -/** - * Negative Integration tests for VPC-SC. - */ +/** Negative Integration tests for VPC-SC. */ @RunWith(JUnit4.class) public class VpcNegativeTest { private static final String IN_VPCSC_GOOGLE_CLOUD_TEST_ENV = "GOOGLE_CLOUD_TESTS_IN_VPCSC"; private static final String OUT_VPCSC_PROJECT_ENV = - "GOOGLE_CLOUD_TESTS_WEB_SECURITY_SCANNER_OUTSIDE_VPC_PROJECT"; + "GOOGLE_CLOUD_TESTS_VPCSC_OUTSIDE_PERIMETER_PROJECT"; private static final String OUT_VPCSC_HOSTNAME_ENV = - "GOOGLE_CLOUD_TESTS_WEB_SECURITY_SCANNER_OUTSIDE_VPC_HOSTNAME"; - private static final String OUT_VPCSC_GOOGLE_CREDENTIAL_ENV = - "GOOGLE_CLOUD_TESTS_WEB_SECURITY_SCANNER_OUTSIDE_VPC_CREDENTIALS"; + "GOOGLE_CLOUD_WEBSECURITYSCANNER_OUTSIDE_HOSTNAME"; + private static final String GOOGLE_CREDENTIAL_DEFAULT_ENV = "GOOGLE_APPLICATION_CREDENTIALS"; private static final String GOOGLE_API_CLOUD_PLATFORM_LINK = "https://www.googleapis.com/auth/cloud-platform"; @@ -60,36 +59,42 @@ public class VpcNegativeTest { private static final String OUT_VPCSC_PROJECT = System.getenv(OUT_VPCSC_PROJECT_ENV); private static final String OUT_VPCSC_HOSTNAME = System.getenv(OUT_VPCSC_HOSTNAME_ENV); private static final String OUT_VPCSC_GOOGLE_CREDENTIAL = - System.getenv(OUT_VPCSC_GOOGLE_CREDENTIAL_ENV); + System.getenv(GOOGLE_CREDENTIAL_DEFAULT_ENV); private String testScanConfigCreationDisplayName; + private static boolean isNotEmpty(String value) { + return value != null && value.length() != 0; + } + @BeforeClass public static void setUpClass() { - assumeTrue( "To run tests, GOOGLE_CLOUD_TESTS_IN_VPCSC environment variable needs to be set to true", IN_VPCSC_TEST != null && IN_VPCSC_TEST.equalsIgnoreCase("true")); - assertWithMessage(OUT_VPCSC_PROJECT_ENV + " must be set to project that resides outside VPCSC") - .that(OUT_VPCSC_PROJECT) - .isNotEmpty(); - - assertWithMessage(OUT_VPCSC_HOSTNAME_ENV + " must be set to host that resides outside VPCSC") - .that(OUT_VPCSC_HOSTNAME) - .isNotEmpty(); - - assertWithMessage( - OUT_VPCSC_GOOGLE_CREDENTIAL_ENV - + " must be set to google application credentials that resides outside VPCSC") - .that(OUT_VPCSC_GOOGLE_CREDENTIAL) - .isNotEmpty(); + assertTrue( + OUT_VPCSC_PROJECT_ENV + + " environment variable needs to be set to a GCP " + + "project that is out of the VPC perimeter", + isNotEmpty(OUT_VPCSC_PROJECT)); + + assertTrue( + OUT_VPCSC_HOSTNAME_ENV + " must be set to a webapp that resides in " + OUT_VPCSC_PROJECT, + isNotEmpty(OUT_VPCSC_HOSTNAME)); + + assertTrue( + GOOGLE_CREDENTIAL_DEFAULT_ENV + + " must be set to google application credentials " + + "that is outside VPCSC perimeter", + isNotEmpty(OUT_VPCSC_GOOGLE_CREDENTIAL)); } @Before public void setup() { - ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("America/Los_Angeles")); - String currentTime = DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(zonedDateTime); + DateTimeFormatter formatter = + DateTimeFormat.fullDateTime().withZone(DateTimeZone.forID("America/Los_Angeles")); + String currentTime = formatter.print(DateTime.now(DateTimeZone.forID("America/Los_Angeles"))); testScanConfigCreationDisplayName = "vpcsc-neg-test" + currentTime + "-0"; } diff --git a/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcPositiveTest.java b/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcPositiveTest.java index c078fc4452e2..cb2a6810b962 100644 --- a/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcPositiveTest.java +++ b/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcPositiveTest.java @@ -13,9 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.google.cloud.websecurityscanner.it.v1beta; -import static com.google.common.truth.Truth.assertWithMessage; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.junit.Assume.assumeTrue; @@ -37,27 +40,23 @@ import com.google.common.collect.Lists; import java.io.FileInputStream; import java.io.IOException; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.joda.time.format.DateTimeFormat; +import org.joda.time.format.DateTimeFormatter; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -/** - * Positive Integration Tests for VPC-SC - */ +/** Positive Integration Tests for VPC-SC */ @RunWith(JUnit4.class) public class VpcPositiveTest { private static final String IN_VPCSC_GOOGLE_CLOUD_TEST_ENV = "GOOGLE_CLOUD_TESTS_IN_VPCSC"; private static final String IN_VPCSC_PROJECT_ENV = - "GOOGLE_CLOUD_TESTS_WEB_SECURITY_SCANNER_INSIDE_VPC_PROJECT"; - private static final String IN_VPCSC_HOSTNAME_ENV = - "GOOGLE_CLOUD_TESTS_WEB_SECURITY_SCANNER_INSIDE_VPC_HOSTNAME"; - private static final String IN_VPCSC_GOOGLE_CREDENTIAL_ENV = - "GOOGLE_CLOUD_TESTS_WEB_SECURITY_SCANNER_INSIDE_VPC_CREDENTIALS"; + "GOOGLE_CLOUD_TESTS_VPCSC_INSIDE_PERIMETER_PROJECT"; + private static final String IN_VPCSC_HOSTNAME_ENV = "GOOGLE_CLOUD_WEBSECURITYSCANNER_HOSTNAME"; private static final String GOOGLE_CREDENTIAL_DEFAULT_ENV = "GOOGLE_APPLICATION_CREDENTIALS"; private static final String GOOGLE_API_CLOUD_PLATFORM_LINK = "https://www.googleapis.com/auth/cloud-platform"; @@ -66,42 +65,46 @@ public class VpcPositiveTest { private static final String IN_VPCSC_PROJECT = System.getenv(IN_VPCSC_PROJECT_ENV); private static final String IN_VPCSC_HOSTNAME = System.getenv(IN_VPCSC_HOSTNAME_ENV); private static final String IN_VPCSC_GOOGLE_CREDENTIAL = - System.getenv(IN_VPCSC_GOOGLE_CREDENTIAL_ENV); + System.getenv(GOOGLE_CREDENTIAL_DEFAULT_ENV); private String test0DisplayName; private String test1DisplayName; + private static boolean isNotEmpty(String value) { + return value != null && value.length() != 0; + } + @BeforeClass public static void setUpClass() { assumeTrue( "To run tests, GOOGLE_CLOUD_TESTS_IN_VPCSC environment variable needs to be set to true", IN_VPCSC_TEST != null && IN_VPCSC_TEST.equalsIgnoreCase("true")); - assertWithMessage(IN_VPCSC_PROJECT_ENV + " must be set to project that resides inside VPCSC") - .that(IN_VPCSC_PROJECT) - .isNotEmpty(); + assertTrue( + IN_VPCSC_PROJECT_ENV + + " environment variable needs to be set to a GCP " + + "project that is inside the VPC perimeter", + isNotEmpty(IN_VPCSC_PROJECT)); - assertWithMessage(IN_VPCSC_HOSTNAME_ENV + " must be set to host that resides inside VPCSC") - .that(IN_VPCSC_HOSTNAME) - .isNotEmpty(); + assertTrue( + IN_VPCSC_HOSTNAME_ENV + + " environment variable needs to be set to a web " + + "application that resides inside " + + IN_VPCSC_PROJECT, + isNotEmpty(IN_VPCSC_HOSTNAME)); - assertWithMessage( - IN_VPCSC_GOOGLE_CREDENTIAL_ENV - + " must be set to google application credentials that resides inside VPCSC") - .that(IN_VPCSC_GOOGLE_CREDENTIAL) - .isNotEmpty(); - - assertWithMessage( + assertTrue( GOOGLE_CREDENTIAL_DEFAULT_ENV - + " must be set to google application credentials that resides inside VPCSC") - .that(System.getenv(GOOGLE_CREDENTIAL_DEFAULT_ENV)) - .isNotEmpty(); + + " environment variable needs to be set to " + + "google application credentials that resides inside VPCSC", + isNotEmpty(IN_VPCSC_GOOGLE_CREDENTIAL)); } @Before public void setUp() { - ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("America/Los_Angeles")); - String currentTime = DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(zonedDateTime); + DateTimeFormatter formatter = + DateTimeFormat.fullDateTime().withZone(DateTimeZone.forID("America/Los_Angeles")); + String currentTime = formatter.print(DateTime.now(DateTimeZone.forID("America/Los_Angeles"))); test0DisplayName = "vpcsctest-" + currentTime + "-0"; test1DisplayName = "vpcsctest-" + currentTime + "-1"; } @@ -215,17 +218,19 @@ public void close() { try (TestResource testResource = new TestResource(wssClient, displayName)) { ScanConfig responseScanConfig = testResource.createScanConfig(); - assertWithMessage("Display name is response must be equal to display name in request") - .that(responseScanConfig.getDisplayName()) - .matches(displayName); + assertEquals( + "Display name is response must be equal to display name in request", + displayName, + responseScanConfig.getDisplayName()); // Make sure that created scan config is present GetScanConfigRequest scanConfigRequest = GetScanConfigRequest.newBuilder().setName(responseScanConfig.getName()).build(); ScanConfig obtainedScanConfig = wssClient.getScanConfig(scanConfigRequest); - assertWithMessage("Scan-Config name must be equal") - .that(obtainedScanConfig.getName()) - .matches(responseScanConfig.getName()); + assertEquals( + "Scan-Config name must be equal", + responseScanConfig.getName(), + obtainedScanConfig.getName()); ListScanConfigsRequest lscRequest = ListScanConfigsRequest.newBuilder().setParent(formattedParent).build(); @@ -237,23 +242,19 @@ public void close() { break; } } - assertWithMessage("One scan-config with " + displayName + " must be present") - .that(oneDisplayNameMatches) - .isTrue(); + assertTrue("One scan-config with " + displayName + " must be present", oneDisplayNameMatches); ScanRun scanRunResponse = testResource.startScanRun(); - assertWithMessage("Scan-run name must not be empty") - .that(scanRunResponse.getName()) - .isNotEmpty(); - assertWithMessage("Scan-run state must not be KILLED") - .that(scanRunResponse.getResultState()) - .isNotEqualTo(ResultState.KILLED); + assertTrue("Scan-run name must not be empty", isNotEmpty(scanRunResponse.getName())); - ScanRun stoppedScanRun = testResource.stopScanRun(); - assertWithMessage("Result state must be killed") - .that(stoppedScanRun.getResultState()) - .isEqualTo(ResultState.KILLED); + assertNotEquals( + "Scan-run state must not be KILLED", + ResultState.KILLED, + scanRunResponse.getResultState()); + ScanRun stoppedScanRun = testResource.stopScanRun(); + assertEquals( + "Result state must be killed", ResultState.KILLED, stoppedScanRun.getResultState()); testResource.deleteScanConfig(); // make sure that deleted scan-config do not exist From 6f338bd505bf20cb825bb03de33c1928eb3bb9ac Mon Sep 17 00:00:00 2001 From: Kumar Ashish Date: Tue, 9 Jul 2019 15:58:46 -0700 Subject: [PATCH 3/5] Undo site.installationModule change. --- google-cloud-clients/google-cloud-websecurityscanner/pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/google-cloud-clients/google-cloud-websecurityscanner/pom.xml b/google-cloud-clients/google-cloud-websecurityscanner/pom.xml index 7ffce4dc97d7..9a8e22bf80ad 100644 --- a/google-cloud-clients/google-cloud-websecurityscanner/pom.xml +++ b/google-cloud-clients/google-cloud-websecurityscanner/pom.xml @@ -14,6 +14,9 @@ google-cloud-clients 0.99.1-alpha-SNAPSHOT + + google-cloud-websecurityscanner + ${project.groupId} From aa12af5b1fd7f7c06d7ec4bc6e872c37f7d360d6 Mon Sep 17 00:00:00 2001 From: Kumar Ashish Date: Wed, 10 Jul 2019 11:29:49 -0700 Subject: [PATCH 4/5] Renamed VpcNegativeTest and VpcPositiveTest to VPCServiceControlNegative and VPCServiceControlPositive respectively. Renamed methods in VPCServiceControlPositiveTest. Changed caught exception in VPCServiceControlNegativeTest. --- ...est.java => VPCServiceControlNegativeTest.java} | 11 ++++++----- ...est.java => VPCServiceControlPositiveTest.java} | 14 +++++++------- 2 files changed, 13 insertions(+), 12 deletions(-) rename google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/{VpcNegativeTest.java => VPCServiceControlNegativeTest.java} (94%) rename google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/{VpcPositiveTest.java => VPCServiceControlPositiveTest.java} (95%) diff --git a/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcNegativeTest.java b/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VPCServiceControlNegativeTest.java similarity index 94% rename from google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcNegativeTest.java rename to google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VPCServiceControlNegativeTest.java index 2733879ba665..595c7cce06f0 100644 --- a/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcNegativeTest.java +++ b/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VPCServiceControlNegativeTest.java @@ -21,6 +21,7 @@ import static org.junit.Assume.assumeTrue; import com.google.api.gax.core.FixedCredentialsProvider; +import com.google.api.gax.rpc.PermissionDeniedException; import com.google.auth.oauth2.GoogleCredentials; import com.google.cloud.websecurityscanner.v1beta.CreateScanConfigRequest; import com.google.cloud.websecurityscanner.v1beta.ListScanConfigsRequest; @@ -34,8 +35,8 @@ import java.io.IOException; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; -import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; +import org.joda.time.format.ISODateTimeFormat; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; @@ -44,7 +45,7 @@ /** Negative Integration tests for VPC-SC. */ @RunWith(JUnit4.class) -public class VpcNegativeTest { +public class VPCServiceControlNegativeTest { private static final String IN_VPCSC_GOOGLE_CLOUD_TEST_ENV = "GOOGLE_CLOUD_TESTS_IN_VPCSC"; private static final String OUT_VPCSC_PROJECT_ENV = @@ -93,7 +94,7 @@ public static void setUpClass() { @Before public void setup() { DateTimeFormatter formatter = - DateTimeFormat.fullDateTime().withZone(DateTimeZone.forID("America/Los_Angeles")); + ISODateTimeFormat.basicDateTime().withZone(DateTimeZone.forID("America/Los_Angeles")); String currentTime = formatter.print(DateTime.now(DateTimeZone.forID("America/Los_Angeles"))); testScanConfigCreationDisplayName = "vpcsc-neg-test" + currentTime + "-0"; } @@ -125,7 +126,7 @@ public void testScanConfigCreation() throws IOException { ScanConfig responseScanConfig = wssClient.createScanConfig(request); fail("Exception must occur for non-accessible project"); - } catch (Exception e) { + } catch (PermissionDeniedException expected) { } } @@ -139,7 +140,7 @@ public void testScanConfigList() throws IOException { ListScanConfigsRequest.newBuilder().setParent(formattedParent).build(); ListScanConfigsPagedResponse scanConfigsList = wssClient.listScanConfigs(lscRequest); fail("Exception must occur for non-acceessible project scan-configs"); - } catch (Exception e) { + } catch (PermissionDeniedException expected) { } } } diff --git a/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcPositiveTest.java b/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VPCServiceControlPositiveTest.java similarity index 95% rename from google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcPositiveTest.java rename to google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VPCServiceControlPositiveTest.java index cb2a6810b962..5f3ac61872fb 100644 --- a/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VpcPositiveTest.java +++ b/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VPCServiceControlPositiveTest.java @@ -42,8 +42,8 @@ import java.io.IOException; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; -import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; +import org.joda.time.format.ISODateTimeFormat; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; @@ -52,7 +52,7 @@ /** Positive Integration Tests for VPC-SC */ @RunWith(JUnit4.class) -public class VpcPositiveTest { +public class VPCServiceControlPositiveTest { private static final String IN_VPCSC_GOOGLE_CLOUD_TEST_ENV = "GOOGLE_CLOUD_TESTS_IN_VPCSC"; private static final String IN_VPCSC_PROJECT_ENV = "GOOGLE_CLOUD_TESTS_VPCSC_INSIDE_PERIMETER_PROJECT"; @@ -103,7 +103,7 @@ public static void setUpClass() { @Before public void setUp() { DateTimeFormatter formatter = - DateTimeFormat.fullDateTime().withZone(DateTimeZone.forID("America/Los_Angeles")); + ISODateTimeFormat.basicDateTime().withZone(DateTimeZone.forID("America/Los_Angeles")); String currentTime = formatter.print(DateTime.now(DateTimeZone.forID("America/Los_Angeles"))); test0DisplayName = "vpcsctest-" + currentTime + "-0"; test1DisplayName = "vpcsctest-" + currentTime + "-1"; @@ -118,22 +118,22 @@ private WebSecurityScannerSettings getWssSettingWithCredentials() throws IOExcep .build(); } - private WebSecurityScannerSettings getWssSettingWithoutCredentials() throws IOException { + private WebSecurityScannerSettings getWssSettingWithDefaultCredentials() throws IOException { // If google-credentials is not passed explicitly then google apis uses the authentication // credentials provided in environment variable GOOGLE_APPLICATION_CREDENTIALS is used return WebSecurityScannerSettings.newBuilder().build(); } @Test - public void test0() throws IOException { + public void testWithDefaultCredentials() throws IOException { try (WebSecurityScannerClient wssClient = - WebSecurityScannerClient.create(getWssSettingWithoutCredentials())) { + WebSecurityScannerClient.create(getWssSettingWithDefaultCredentials())) { test(wssClient, test0DisplayName); } } @Test - public void test1() throws IOException { + public void testWithCredentials() throws IOException { try (WebSecurityScannerClient wssClient = WebSecurityScannerClient.create(getWssSettingWithCredentials())) { test(wssClient, test1DisplayName); From 597c390c9bc3469c4750b2c7352359d17cc6df19 Mon Sep 17 00:00:00 2001 From: Kumar Ashish Date: Wed, 10 Jul 2019 12:06:27 -0700 Subject: [PATCH 5/5] Renamed exception from nfe to expected. --- .../it/v1beta/VPCServiceControlPositiveTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VPCServiceControlPositiveTest.java b/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VPCServiceControlPositiveTest.java index 5f3ac61872fb..363e6367163c 100644 --- a/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VPCServiceControlPositiveTest.java +++ b/google-cloud-clients/google-cloud-websecurityscanner/src/test/java/com/google/cloud/websecurityscanner/it/v1beta/VPCServiceControlPositiveTest.java @@ -263,7 +263,7 @@ public void close() { try { ScanConfig deletedScanConfig = wssClient.getScanConfig(getScanConfigRequest); fail("NotFoundException must be throw as scan-config must already be deleted"); - } catch (NotFoundException nfe) { + } catch (NotFoundException expected) { } } }