5454import org .junit .jupiter .api .BeforeEach ;
5555import org .junit .jupiter .api .Test ;
5656
57+ import java .io .IOException ;
5758import java .util .ArrayList ;
5859import java .util .Collections ;
5960import java .util .HashMap ;
6768import static org .assertj .core .api .Assertions .assertThat ;
6869import static org .assertj .core .api .Assertions .assertThatThrownBy ;
6970import static org .junit .jupiter .api .Assertions .assertEquals ;
71+ import static org .junit .jupiter .api .Assertions .assertThrows ;
7072
7173/** Test for REST Catalog. */
7274class RESTCatalogTest extends CatalogTestBase {
@@ -92,8 +94,6 @@ public void setUp() throws Exception {
9294 warehouse ,
9395 "header." + serverDefineHeaderName ,
9496 serverDefineHeaderValue ,
95- RESTCatalogOptions .DATA_TOKEN_ENABLED .key (),
96- "true" ,
9797 "catalog-server-id" ,
9898 serverId ),
9999 ImmutableMap .of ());
@@ -224,13 +224,87 @@ void testSnapshotFromREST() throws Exception {
224224 }
225225
226226 @ Test
227- public void testBatchRecordsWrite () throws Exception {
227+ public void testDataTokenExpired () throws Exception {
228+ this .catalog = initDataTokenCatalog ();
229+ Identifier identifier =
230+ Identifier .create ("test_data_token" , "table_for_expired_date_token" );
231+ createTable (identifier , Maps .newHashMap (), Lists .newArrayList ("col1" ));
232+ RESTToken expiredDataToken =
233+ new RESTToken (
234+ ImmutableMap .of (
235+ "akId" , "akId-expire" , "akSecret" , UUID .randomUUID ().toString ()),
236+ System .currentTimeMillis () - 100_000 );
237+ restCatalogServer .setDataToken (identifier , expiredDataToken );
238+ FileStoreTable tableTestWrite = (FileStoreTable ) catalog .getTable (identifier );
239+ restCatalogServer .setFileIO (identifier , tableTestWrite .fileIO ());
240+ List <Integer > data = Lists .newArrayList (12 );
241+ assertThrows (IOException .class , () -> batchWrite (tableTestWrite , data ));
242+ RESTToken dataToken =
243+ new RESTToken (
244+ ImmutableMap .of ("akId" , "akId" , "akSecret" , UUID .randomUUID ().toString ()),
245+ System .currentTimeMillis () + 100_000 );
246+ restCatalogServer .setDataToken (identifier , dataToken );
247+ batchWrite (tableTestWrite , data );
248+ List <String > actual = batchRead (tableTestWrite );
249+ assertThat (actual ).containsExactlyInAnyOrder ("+I[12]" );
250+ }
251+
252+ @ Test
253+ public void testDataTokenUnExistInServer () throws Exception {
254+ this .catalog = initDataTokenCatalog ();
255+ Identifier identifier =
256+ Identifier .create ("test_data_token" , "table_for_un_exist_date_token" );
257+ createTable (identifier , Maps .newHashMap (), Lists .newArrayList ("col1" ));
258+ FileStoreTable tableTestWrite = (FileStoreTable ) catalog .getTable (identifier );
259+ RESTTokenFileIO restTokenFileIO = (RESTTokenFileIO ) tableTestWrite .fileIO ();
260+ List <Integer > data = Lists .newArrayList (12 );
261+ // as RESTTokenFileIO is lazy so we need to call isObjectStore() to init fileIO
262+ restTokenFileIO .isObjectStore ();
263+ restCatalogServer .removeDataToken (identifier );
264+ restCatalogServer .setFileIO (identifier , tableTestWrite .fileIO ());
265+ assertThrows (IOException .class , () -> batchWrite (tableTestWrite , data ));
266+ }
228267
268+ private void batchWrite (FileStoreTable tableTestWrite , List <Integer > data ) throws Exception {
269+ BatchWriteBuilder writeBuilder = tableTestWrite .newBatchWriteBuilder ();
270+ BatchTableWrite write = writeBuilder .newWrite ();
271+ data .forEach (
272+ i -> {
273+ GenericRow record1 = GenericRow .of (i );
274+ try {
275+ write .write (record1 );
276+ } catch (Exception e ) {
277+ throw new RuntimeException (e );
278+ }
279+ });
280+ List <CommitMessage > messages = write .prepareCommit ();
281+ BatchTableCommit commit = writeBuilder .newCommit ();
282+ commit .commit (messages );
283+ write .close ();
284+ commit .close ();
285+ }
286+
287+ private List <String > batchRead (FileStoreTable tableTestWrite ) throws IOException {
288+ ReadBuilder readBuilder = tableTestWrite .newReadBuilder ();
289+ List <Split > splits = readBuilder .newScan ().plan ().splits ();
290+ TableRead read = readBuilder .newRead ();
291+ RecordReader <InternalRow > reader = read .createReader (splits );
292+ List <String > result = new ArrayList <>();
293+ reader .forEachRemaining (
294+ row -> {
295+ String rowStr =
296+ String .format ("%s[%d]" , row .getRowKind ().shortString (), row .getInt (0 ));
297+ result .add (rowStr );
298+ });
299+ return result ;
300+ }
301+
302+ @ Test
303+ public void testBatchRecordsWrite () throws Exception {
229304 Identifier tableIdentifier = Identifier .create ("my_db" , "my_table" );
230305 createTable (tableIdentifier , Maps .newHashMap (), Lists .newArrayList ("col1" ));
231306 FileStoreTable tableTestWrite = (FileStoreTable ) catalog .getTable (tableIdentifier );
232- restCatalogServer .tableFileIOStore .put (
233- tableIdentifier .getFullName (), tableTestWrite .fileIO ());
307+ restCatalogServer .setFileIO (tableIdentifier , tableTestWrite .fileIO ());
234308 // write
235309 BatchWriteBuilder writeBuilder = tableTestWrite .newBatchWriteBuilder ();
236310 BatchTableWrite write = writeBuilder .newWrite ();
0 commit comments