1 /* 2 * Copyright 2020 Google LLC 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * https://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.google.cloud.bigqueryconnection.v1.it; 18 19 import static junit.framework.TestCase.assertEquals; 20 import static junit.framework.TestCase.assertNotNull; 21 22 import com.google.api.resourcenames.ResourceName; 23 import com.google.cloud.ServiceOptions; 24 import com.google.cloud.bigquery.connection.v1.CloudSqlCredential; 25 import com.google.cloud.bigquery.connection.v1.CloudSqlProperties; 26 import com.google.cloud.bigquery.connection.v1.Connection; 27 import com.google.cloud.bigquery.connection.v1.ConnectionName; 28 import com.google.cloud.bigquery.connection.v1.CreateConnectionRequest; 29 import com.google.cloud.bigquery.connection.v1.DeleteConnectionRequest; 30 import com.google.cloud.bigquery.connection.v1.GetConnectionRequest; 31 import com.google.cloud.bigquery.connection.v1.ListConnectionsRequest; 32 import com.google.cloud.bigquery.connection.v1.LocationName; 33 import com.google.cloud.bigquery.connection.v1.UpdateConnectionRequest; 34 import com.google.cloud.bigqueryconnection.v1.ConnectionServiceClient; 35 import com.google.common.collect.ImmutableList; 36 import com.google.iam.v1.Binding; 37 import com.google.iam.v1.Policy; 38 import com.google.iam.v1.SetIamPolicyRequest; 39 import com.google.protobuf.FieldMask; 40 import com.google.protobuf.util.FieldMaskUtil; 41 import java.io.IOException; 42 import java.util.UUID; 43 import org.junit.After; 44 import org.junit.Before; 45 import org.junit.BeforeClass; 46 import org.junit.Ignore; 47 import org.junit.Test; 48 49 @Ignore( 50 "Excluding this test until the problem is resolved. https://github.com/googleapis/google-cloud-java/issues/9040") 51 public class ITSystemTest { 52 53 private static final String ID = UUID.randomUUID().toString().substring(0, 8); 54 private static final String PROJECT_ID = ServiceOptions.getDefaultProjectId(); 55 private static final String CONNECTION_ID = "test-connectin-id-" + ID; 56 private static final String LOCATION = "US"; 57 private static final String PARENT = LocationName.of(PROJECT_ID, LOCATION).toString(); 58 private static final String REGION = "us-central1"; 59 private static final String MY_SQL_DATABASE = requireEnvVar("MY_SQL_DATABASE"); 60 private static final String MY_SQL_INSTANCE = requireEnvVar("MY_SQL_INSTANCE"); 61 private static final String DB_USER = requireEnvVar("DB_USER"); 62 private static final String DB_PWD = requireEnvVar("DB_PWD"); 63 private static ConnectionServiceClient client; 64 private static Connection connection; 65 requireEnvVar(String varName)66 private static String requireEnvVar(String varName) { 67 String value = System.getenv(varName); 68 assertNotNull( 69 "Environment variable " + varName + " is required to perform these tests.", 70 System.getenv(varName)); 71 return value; 72 } 73 74 @BeforeClass checkRequirements()75 public static void checkRequirements() { 76 requireEnvVar("MY_SQL_DATABASE"); 77 requireEnvVar("MY_SQL_INSTANCE"); 78 requireEnvVar("DB_USER"); 79 requireEnvVar("DB_PWD"); 80 } 81 82 @Before setUp()83 public void setUp() throws IOException { 84 client = ConnectionServiceClient.create(); 85 // create a temporary connection to be deleted 86 String instanceId = String.format("%s:%s:%s", PROJECT_ID, REGION, MY_SQL_INSTANCE); 87 CloudSqlCredential cloudSqlCredential = 88 CloudSqlCredential.newBuilder().setUsername(DB_USER).setPassword(DB_PWD).build(); 89 CloudSqlProperties cloudSqlProperties = 90 CloudSqlProperties.newBuilder() 91 .setType(CloudSqlProperties.DatabaseType.MYSQL) 92 .setDatabase(MY_SQL_DATABASE) 93 .setInstanceId(instanceId) 94 .setCredential(cloudSqlCredential) 95 .build(); 96 CreateConnectionRequest request = 97 CreateConnectionRequest.newBuilder() 98 .setParent(PARENT) 99 .setConnection(Connection.newBuilder().setCloudSql(cloudSqlProperties).build()) 100 .setConnectionId(CONNECTION_ID) 101 .build(); 102 connection = client.createConnection(request); 103 } 104 105 @After tearDown()106 public void tearDown() { 107 // delete a connection 108 DeleteConnectionRequest request = 109 DeleteConnectionRequest.newBuilder().setName(connection.getName()).build(); 110 client.deleteConnection(request); 111 client.close(); 112 } 113 114 @Test testGetConnection()115 public void testGetConnection() { 116 GetConnectionRequest request = 117 GetConnectionRequest.newBuilder().setName(connection.getName()).build(); 118 Connection actualConnection = client.getConnection(request); 119 assertEquals(connection, actualConnection); 120 } 121 122 @Test testListConnections()123 public void testListConnections() { 124 int pageSize = 10; 125 ListConnectionsRequest request = 126 ListConnectionsRequest.newBuilder().setParent(PARENT).setPageSize(pageSize).build(); 127 for (Connection actualConnection : client.listConnections(request).iterateAll()) { 128 if (connection.getName().equals(actualConnection.getName())) { 129 assertEquals(connection, actualConnection); 130 } 131 } 132 } 133 134 @Test testUpdateConnection()135 public void testUpdateConnection() { 136 String description = "MY_DESCRIPTION"; 137 FieldMask updateMask = FieldMaskUtil.fromString("description"); 138 UpdateConnectionRequest request = 139 UpdateConnectionRequest.newBuilder() 140 .setName(connection.getName()) 141 .setConnection(Connection.newBuilder().setDescription(description).build()) 142 .setUpdateMask(updateMask) 143 .build(); 144 Connection actualConnection = client.updateConnection(request); 145 assertEquals(description, actualConnection.getDescription()); 146 } 147 148 @Test testShareConnection()149 public void testShareConnection() { 150 ResourceName resource = ConnectionName.of(PROJECT_ID, LOCATION, CONNECTION_ID); 151 Binding binding = 152 Binding.newBuilder() 153 .addMembers("group:[email protected]") 154 .setRole("roles/bigquery.connectionUser") 155 .build(); 156 Policy policy = Policy.newBuilder().addBindings(binding).build(); 157 SetIamPolicyRequest request = 158 SetIamPolicyRequest.newBuilder().setResource(resource.toString()).setPolicy(policy).build(); 159 Policy actualPolicy = client.setIamPolicy(request); 160 assertEquals(ImmutableList.of(binding), actualPolicy.getBindingsList()); 161 } 162 } 163