19
19
import static com .google .common .truth .Truth .assertThat ;
20
20
import static junit .framework .TestCase .assertNotNull ;
21
21
22
+ import com .google .cloud .bigtable .admin .v2 .BigtableTableAdminClient ;
23
+ import com .google .cloud .bigtable .admin .v2 .models .CreateTableRequest ;
24
+ import com .google .cloud .bigtable .data .v2 .BigtableDataClient ;
25
+ import com .google .cloud .bigtable .data .v2 .models .BulkMutation ;
26
+ import com .google .cloud .bigtable .data .v2 .models .Mutation ;
27
+ import com .google .protobuf .ByteString ;
22
28
import java .io .ByteArrayOutputStream ;
29
+ import java .io .IOException ;
23
30
import java .io .PrintStream ;
24
31
import java .util .UUID ;
25
32
import java .util .logging .Level ;
32
39
public class QueryExternalBigtablePermIT {
33
40
34
41
private final Logger log = Logger .getLogger (this .getClass ().getName ());
42
+ private static final String ID = UUID .randomUUID ().toString ().substring (0 , 8 );
43
+ private static final String TABLE_ID = "bigquery-samples-test" + ID ;
44
+ private static final String COLUMN_FAMILY_NAME = "stats_summary" ;
45
+ private static final long TIMESTAMP = System .currentTimeMillis () * 1000 ;
46
+ private static final String CONNECTED_CELL = "connected_cell" ;
47
+ private static final String CONNECTED_WIFI = "connected_wifi" ;
48
+ private static final String OS_BUILD = "os_build" ;
35
49
private String tableName ;
36
50
private ByteArrayOutputStream bout ;
37
51
private PrintStream out ;
38
52
private PrintStream originalPrintStream ;
39
53
54
+ private static final String INSTANCE = requireEnvVar ("BIGTABLE_TESTING_INSTANCE" );
55
+ private static final String PROJECT = requireEnvVar ("SAMPLES_TESTING_PROJECT" );
40
56
private static final String BIGQUERY_DATASET_NAME = requireEnvVar ("BIGQUERY_DATASET_NAME" );
41
- private static final String BIGTABLE_URI = requireEnvVar ("BIGTABLE_URI" );
42
57
43
58
private static String requireEnvVar (String varName ) {
44
59
String value = System .getenv (varName );
@@ -50,23 +65,111 @@ private static String requireEnvVar(String varName) {
50
65
51
66
@ BeforeClass
52
67
public static void checkRequirements () {
68
+ requireEnvVar ("GOOGLE_CLOUD_PROJECT" );
69
+ requireEnvVar ("BIGTABLE_TESTING_INSTANCE" );
53
70
requireEnvVar ("BIGQUERY_DATASET_NAME" );
54
- requireEnvVar ("BIGTABLE_URI" );
55
71
}
56
72
57
73
@ Before
58
- public void setUp () {
74
+ public void setUp () throws IOException {
59
75
// Create a test table
60
- tableName = "EXTERNAL_TABLE_FROM_BIGTABLE_TEST_" + UUID . randomUUID (). toString (). substring ( 0 , 8 ) ;
76
+ tableName = "EXTERNAL_TABLE_FROM_BIGTABLE_TEST_" + ID ;
61
77
bout = new ByteArrayOutputStream ();
62
78
out = new PrintStream (bout );
63
79
originalPrintStream = System .out ;
64
80
System .setOut (out );
81
+
82
+ // create a temporary bigtable table.
83
+ try (BigtableTableAdminClient client = BigtableTableAdminClient .create (PROJECT , INSTANCE )) {
84
+ CreateTableRequest createTableRequest =
85
+ CreateTableRequest .of (TABLE_ID ).addFamily (COLUMN_FAMILY_NAME );
86
+ client .createTable (createTableRequest );
87
+ }
88
+ // inserting temporary rows.
89
+ try (BigtableDataClient client = BigtableDataClient .create (PROJECT , INSTANCE )) {
90
+ BulkMutation bulkMutation =
91
+ BulkMutation .create (TABLE_ID )
92
+ .add (
93
+ "phone#4c410523#20190501" ,
94
+ Mutation .create ()
95
+ .setCell (
96
+ COLUMN_FAMILY_NAME ,
97
+ ByteString .copyFrom (CONNECTED_CELL .getBytes ()),
98
+ TIMESTAMP ,
99
+ 1 )
100
+ .setCell (
101
+ COLUMN_FAMILY_NAME ,
102
+ ByteString .copyFrom (CONNECTED_WIFI .getBytes ()),
103
+ TIMESTAMP ,
104
+ 1 )
105
+ .setCell (COLUMN_FAMILY_NAME , OS_BUILD , TIMESTAMP , "PQ2A.190405.003" ))
106
+ .add (
107
+ "phone#4c410523#20190502" ,
108
+ Mutation .create ()
109
+ .setCell (
110
+ COLUMN_FAMILY_NAME ,
111
+ ByteString .copyFrom (CONNECTED_CELL .getBytes ()),
112
+ TIMESTAMP ,
113
+ 1 )
114
+ .setCell (
115
+ COLUMN_FAMILY_NAME ,
116
+ ByteString .copyFrom (CONNECTED_WIFI .getBytes ()),
117
+ TIMESTAMP ,
118
+ 1 )
119
+ .setCell (COLUMN_FAMILY_NAME , OS_BUILD , TIMESTAMP , "PQ2A.190405.004" ))
120
+ .add (
121
+ "phone#4c410523#20190505" ,
122
+ Mutation .create ()
123
+ .setCell (
124
+ COLUMN_FAMILY_NAME ,
125
+ ByteString .copyFrom (CONNECTED_CELL .getBytes ()),
126
+ TIMESTAMP ,
127
+ 0 )
128
+ .setCell (
129
+ COLUMN_FAMILY_NAME ,
130
+ ByteString .copyFrom (CONNECTED_WIFI .getBytes ()),
131
+ TIMESTAMP ,
132
+ 1 )
133
+ .setCell (COLUMN_FAMILY_NAME , OS_BUILD , TIMESTAMP , "PQ2A.190406.000" ))
134
+ .add (
135
+ "phone#5c10102#20190501" ,
136
+ Mutation .create ()
137
+ .setCell (
138
+ COLUMN_FAMILY_NAME ,
139
+ ByteString .copyFrom (CONNECTED_CELL .getBytes ()),
140
+ TIMESTAMP ,
141
+ 1 )
142
+ .setCell (
143
+ COLUMN_FAMILY_NAME ,
144
+ ByteString .copyFrom (CONNECTED_WIFI .getBytes ()),
145
+ TIMESTAMP ,
146
+ 1 )
147
+ .setCell (COLUMN_FAMILY_NAME , OS_BUILD , TIMESTAMP , "PQ2A.190401.002" ))
148
+ .add (
149
+ "phone#5c10102#20190502" ,
150
+ Mutation .create ()
151
+ .setCell (
152
+ COLUMN_FAMILY_NAME ,
153
+ ByteString .copyFrom (CONNECTED_CELL .getBytes ()),
154
+ TIMESTAMP ,
155
+ 1 )
156
+ .setCell (
157
+ COLUMN_FAMILY_NAME ,
158
+ ByteString .copyFrom (CONNECTED_WIFI .getBytes ()),
159
+ TIMESTAMP ,
160
+ 0 )
161
+ .setCell (COLUMN_FAMILY_NAME , OS_BUILD , TIMESTAMP , "PQ2A.190406.000" ));
162
+
163
+ client .bulkMutateRows (bulkMutation );
164
+ }
65
165
}
66
166
67
167
@ After
68
- public void tearDown () {
168
+ public void tearDown () throws IOException {
69
169
// Clean up
170
+ try (BigtableTableAdminClient client = BigtableTableAdminClient .create (PROJECT , INSTANCE )) {
171
+ client .deleteTable (TABLE_ID );
172
+ }
70
173
DeleteTable .deleteTable (BIGQUERY_DATASET_NAME , tableName );
71
174
// restores print statements in the original method
72
175
System .out .flush ();
@@ -77,8 +180,12 @@ public void tearDown() {
77
180
@ Test
78
181
public void testQueryExternalBigtablePerm () {
79
182
String query = String .format ("SELECT * FROM %s.%s " , BIGQUERY_DATASET_NAME , tableName );
183
+ String sourceUri =
184
+ String .format (
185
+ "https://googleapis.com/bigtable/projects/%s/instances/%s/tables/%s" ,
186
+ PROJECT , INSTANCE , TABLE_ID );
80
187
QueryExternalBigtablePerm .queryExternalBigtablePerm (
81
- BIGQUERY_DATASET_NAME , tableName , BIGTABLE_URI , query );
188
+ BIGQUERY_DATASET_NAME , tableName , sourceUri , query );
82
189
assertThat (bout .toString ())
83
190
.contains ("Query on external permanent table performed successfully." );
84
191
}
0 commit comments