1
1
package com .dtsx .astra .sdk .utils ;
2
2
3
- import com .dtsx .astra .sdk .AstraDevopsApiClient ;
4
- import com .dtsx .astra .sdk .db .DatabaseClient ;
5
3
import com .dtsx .astra .sdk .db .AstraDbClient ;
4
+ import com .dtsx .astra .sdk .db .DatabaseClient ;
6
5
import com .dtsx .astra .sdk .db .domain .CloudProviderType ;
7
6
import com .dtsx .astra .sdk .db .domain .Database ;
7
+ import com .dtsx .astra .sdk .db .domain .DatabaseCreationBuilder ;
8
8
import com .dtsx .astra .sdk .db .domain .DatabaseCreationRequest ;
9
9
import com .dtsx .astra .sdk .db .domain .DatabaseStatusType ;
10
10
import org .apache .hc .client5 .http .classic .methods .HttpGet ;
11
11
import org .apache .hc .client5 .http .impl .classic .CloseableHttpClient ;
12
- import org .apache .hc .client5 .http .impl .classic .CloseableHttpResponse ;
13
12
import org .apache .hc .client5 .http .impl .classic .HttpClients ;
14
13
import org .apache .hc .core5 .http .HttpHeaders ;
15
14
import org .slf4j .Logger ;
16
15
import org .slf4j .LoggerFactory ;
17
16
18
17
import java .io .IOException ;
19
- import java .util .List ;
20
18
import java .util .Optional ;
21
- import java .util .stream .Collectors ;
22
19
23
20
/**
24
21
* Helper for tetst.
28
25
public class TestUtils {
29
26
30
27
/** Test constant. */
31
- public static final String TEST_DBNAME = "sdk_tests" ;
32
-
33
- /** Test constant. */
34
- public static final String TEST_NAMESPACE = "java" ;
28
+ public static final String TEST_REGION = "us-east1" ;
35
29
36
30
/** Test constant. */
37
- public static final String TEST_REGION = "us-east1 " ;
31
+ public static final String TEST_TIER = "serverless " ;
38
32
39
33
/** Test constant. */
40
34
public static final CloudProviderType TEST_PROVIDER = CloudProviderType .GCP ;
41
35
42
- /** Test constant. */
43
- public static final String TEST_TIER = "serverless" ;
36
+ /**
37
+ * Logger for the class.
38
+ */
39
+ static Logger logger = LoggerFactory .getLogger (TestUtils .class );
40
+
44
41
45
42
/**
46
43
* Hide default constructor
47
44
*/
48
45
private TestUtils () {}
49
46
47
+ /**
48
+ * Read Token for tests.
49
+ *
50
+ * @return
51
+ * token for test or error
52
+ */
53
+ public static String getAstraToken () {
54
+ String token = null ;
55
+ if (AstraRc .isDefaultConfigFileExists ()) {
56
+ token = new AstraRc ()
57
+ .getSectionKey (AstraRc .ASTRARC_DEFAULT , AstraRc .ASTRA_DB_APPLICATION_TOKEN )
58
+ .orElse (null );
59
+ }
60
+ return Optional .ofNullable (Utils
61
+ .readEnvVariable (AstraRc .ASTRA_DB_APPLICATION_TOKEN ).
62
+ orElse (token ))
63
+ .orElseThrow (() -> new IllegalStateException (
64
+ "ASTRA_DB_APPLICATION_TOKEN is not defined as env variable or present in file ~/.astrarc" ));
65
+ }
66
+
67
+ /**
68
+ * Initialize databases for tests.
69
+ *
70
+ * @param dbName
71
+ * database name
72
+ * @param keyspace
73
+ * expected keyspace
74
+ * @return
75
+ * the database id
76
+ */
77
+ public static String setupVectorDatabase (String dbName , String keyspace ) {
78
+ return setupDatabase (getAstraToken (), AstraEnvironment .PROD , dbName , keyspace , true );
79
+ }
80
+
81
+ /**
82
+ * Initialize databases for tests.
83
+ *
84
+ * @param dbName
85
+ * database name
86
+ * @param keyspace
87
+ * expected keyspace
88
+ * @return
89
+ * the database id
90
+ */
91
+ public static String setupVectorDatabase (AstraEnvironment env , String dbName , String keyspace ) {
92
+ return setupDatabase (getAstraToken (), env , dbName , keyspace , true );
93
+ }
94
+
95
+ /**
96
+ * Initialize databases for tests.
97
+ *
98
+ * @param dbName
99
+ * database name
100
+ * @param keyspace
101
+ * expected keyspace
102
+ * @return
103
+ * the database id
104
+ */
105
+ public static String setupDatabase (AstraEnvironment env , String dbName , String keyspace ) {
106
+ return setupDatabase (getAstraToken (), env , dbName , keyspace , false );
107
+ }
108
+
109
+ /**
110
+ * Initialize databases for tests.
111
+ *
112
+ * @param dbName
113
+ * database name
114
+ * @param keyspace
115
+ * expected keyspace
116
+ * @return
117
+ * the database id
118
+ */
119
+ public static String setupDatabase (String dbName , String keyspace ) {
120
+ return setupDatabase (getAstraToken (), AstraEnvironment .PROD , dbName , keyspace , false );
121
+ }
122
+
123
+ /**
124
+ * Initialize databases for tests.
125
+ *
126
+ * @param dbName
127
+ * database name
128
+ * @param keyspace
129
+ * expected keyspace
130
+ * @return
131
+ * the database id
132
+ */
133
+ public static String setupDatabase (AstraEnvironment env , String dbName , String keyspace , boolean vector ) {
134
+ return setupDatabase (getAstraToken (), env , dbName , keyspace , vector );
135
+ }
136
+
137
+ /**
138
+ * Initialize databases for tests.
139
+ *
140
+ * @param token
141
+ * token for the organization
142
+ * @param dbName
143
+ * database name
144
+ * @param keyspace
145
+ * expected keyspace
146
+ * @return
147
+ * the database id
148
+ */
149
+ public static String setupDatabase (String token , AstraEnvironment env , String dbName , String keyspace , boolean vector ) {
150
+ AstraDbClient devopsDbCli = new AstraDbClient (getAstraToken (), env );
151
+ Optional <Database > optDb = devopsDbCli .findByName (dbName ).findAny ();
152
+ if (optDb .isPresent ()) {
153
+ // Db is present, should we resume it ?
154
+ Database db = optDb .get ();
155
+ DatabaseClient dbClient = devopsDbCli .database (db .getId ());
156
+ if (db .getStatus ().equals (DatabaseStatusType .HIBERNATED )) {
157
+ logger .info ("Resume DB {} as HIBERNATED " , dbName );
158
+ resumeDb (optDb .get ());
159
+ waitForDbStatus (dbClient , DatabaseStatusType .ACTIVE , 500 );
160
+ }
161
+ // Db is active, should I add a keyspace ?
162
+ if (!dbClient .keyspaces ().findAll ().contains (keyspace )) {
163
+ dbClient .keyspaces ().create (keyspace );
164
+ waitForDbStatus (dbClient , DatabaseStatusType .ACTIVE , 100 );
165
+ }
166
+ return db .getId ();
167
+ } else {
168
+ // Db is not present...creation
169
+ DatabaseCreationBuilder builder = DatabaseCreationRequest
170
+ .builder ()
171
+ .name (dbName )
172
+ .tier (TEST_TIER )
173
+ .cloudProvider (TEST_PROVIDER )
174
+ .cloudRegion (TEST_REGION )
175
+ .keyspace (keyspace );
176
+ if (vector ) {
177
+ builder = builder .withVector ();
178
+ }
179
+ String serverlessDbId = devopsDbCli .create (builder .build ());
180
+ DatabaseClient dbc = new DatabaseClient (devopsDbCli .getToken (), serverlessDbId );
181
+ waitForDbStatus (dbc , DatabaseStatusType .ACTIVE , 180 );
182
+ return serverlessDbId ;
183
+ }
184
+ }
185
+
50
186
/**
51
187
* Wait for db to have proper status.
52
188
*
@@ -78,42 +214,6 @@ public static void waitForDbStatus(DatabaseClient dbc, DatabaseStatusType status
78
214
public static void waitForSeconds (int seconds ) {
79
215
try {Thread .sleep (seconds * 1000 );} catch (InterruptedException e ) {}
80
216
}
81
-
82
- /**
83
- * Initialize databases for tests.
84
- *
85
- * @param devopsDbCli
86
- * devops database API.
87
- * @param dbName
88
- * database name
89
- * @param keyspace
90
- * expected keyspace
91
- * @return
92
- * the database id
93
- */
94
- public static String createDbAndKeyspaceIfNotExist (AstraDbClient devopsDbCli , String dbName , String keyspace ) {
95
- List <Database > dbs = devopsDbCli .findByName (dbName ).collect (Collectors .toList ());
96
- if (dbs .size () > 0 ) {
97
- Database db = dbs .get (0 );
98
- DatabaseClient dbc = new DatabaseClient (devopsDbCli .getToken (), db .getId ());
99
- if (!db .getInfo ().getKeyspaces ().contains (keyspace )) {
100
- dbc .keyspaces ().create (keyspace );
101
- waitForDbStatus (dbc , DatabaseStatusType .ACTIVE , 60 );
102
- } return db .getId ();
103
- } else {
104
- String serverlessDbId = devopsDbCli .create (DatabaseCreationRequest
105
- .builder ()
106
- .name (dbName )
107
- .tier (TEST_TIER )
108
- .cloudProvider (TEST_PROVIDER )
109
- .cloudRegion (TEST_REGION )
110
- .keyspace (keyspace )
111
- .build ());
112
- DatabaseClient dbc = new DatabaseClient (devopsDbCli .getToken (), serverlessDbId );
113
- waitForDbStatus (dbc , DatabaseStatusType .ACTIVE , 120 );
114
- return serverlessDbId ;
115
- }
116
- }
117
217
118
218
/**
119
219
* Terminate database if needed.
@@ -131,22 +231,6 @@ public static void terminateDatabaseByName(AstraDbClient devopsDbCli, String dbN
131
231
}
132
232
}
133
233
134
- /**
135
- * Read Token for tests.
136
- *
137
- * @return
138
- * token for test or error
139
- */
140
- public static String readToken () {
141
- String token = null ;
142
- if (AstraRc .isDefaultConfigFileExists ()) {
143
- token = new AstraRc ()
144
- .getSectionKey (AstraRc .ASTRARC_DEFAULT , AstraRc .ASTRA_DB_APPLICATION_TOKEN )
145
- .orElse (null );
146
- }
147
- return Utils .readEnvVariable (AstraRc .ASTRA_DB_APPLICATION_TOKEN ).orElse (token );
148
- }
149
-
150
234
/**
151
235
* Database name.
152
236
*
@@ -159,59 +243,12 @@ private static void resumeDb(Database db) {
159
243
.getApiRestEndpoint (db .getId (), db .getInfo ().getRegion ()) +
160
244
"/v2/schemas/keyspace" );
161
245
request .setHeader (HttpHeaders .CONTENT_TYPE , "application/json" );
162
- request .setHeader ("X-Cassandra-Token" , readToken ());
246
+ request .setHeader ("X-Cassandra-Token" , getAstraToken ());
163
247
request .setHeader ("Content-Type" , "application/json" );
164
248
httpClient .execute (request ).close ();
165
249
} catch (IOException e ) {
166
250
throw new IllegalStateException ("Cannot resume DB" , e );
167
251
}
168
252
}
169
253
170
- /**
171
- * Logger for the class.
172
- */
173
- static Logger logger = LoggerFactory .getLogger (TestUtils .class );
174
-
175
- /**
176
- * Create DB if not exist
177
- *
178
- * @param dbName
179
- * database name
180
- * @param keyspace
181
- * keyspace name
182
- * @return
183
- * database client
184
- * @throws InterruptedException
185
- * wait for db availability interrupted
186
- */
187
- public static String setupDatabase (String dbName , String keyspace )
188
- throws InterruptedException {
189
- AstraDbClient astraDb = new AstraDbClient (readToken ());
190
- Optional <Database > optDb = astraDb .findByName (dbName ).findAny ();
191
- String dbId = null ;
192
- if (!optDb .isPresent ()) {
193
- logger .info ("Creating database '{}' as it does not exist, this operation takes about 90s, please wait... " , dbName );
194
- dbId = astraDb .create (DatabaseCreationRequest
195
- .builder ().name (dbName )
196
- .keyspace (keyspace )
197
- .cloudRegion (TEST_REGION )
198
- .withVector ()
199
- .build ());
200
- } else {
201
- dbId = optDb .get ().getId ();
202
- DatabaseClient dbClient = astraDb .database (dbId );
203
- if (optDb .get ().getStatus ().equals (DatabaseStatusType .HIBERNATED )) {
204
- logger .info ("Resume DB {} as HIBERNATED " , dbName );
205
- resumeDb (optDb .get ());
206
- waitForDbStatus (dbClient , DatabaseStatusType .ACTIVE , 500 );
207
- }
208
- if (!dbClient .keyspaces ().findAll ().contains (keyspace )) {
209
- dbClient .keyspaces ().create (keyspace );
210
- }
211
- }
212
- TestUtils .waitForDbStatus (astraDb .database (dbId ), DatabaseStatusType .ACTIVE , 500 );
213
- return dbId ;
214
- }
215
-
216
-
217
254
}
0 commit comments