2121import one .block .eosiojava .error .rpcProvider .GetInfoRpcError ;
2222import one .block .eosiojava .error .rpcProvider .GetRequiredKeysRpcError ;
2323import one .block .eosiojava .error .rpcProvider .PushTransactionRpcError ;
24+ import one .block .eosiojava .error .serializationProvider .DeserializeDataError ;
2425import one .block .eosiojava .error .serializationProvider .DeserializeTransactionError ;
26+ import one .block .eosiojava .error .serializationProvider .SerializeDataError ;
2527import one .block .eosiojava .error .serializationProvider .SerializeError ;
2628import one .block .eosiojava .error .serializationProvider .SerializeTransactionError ;
2729import one .block .eosiojava .error .session .TransactionBroadCastError ;
@@ -204,6 +206,8 @@ public void getTransaction() {
204206 assertEquals (expectedRefBlockNum , transaction .getRefBlockNum ());
205207 assertEquals (refBlockPrefix , transaction .getRefBlockPrefix ());
206208 assertNotNull (transaction .getRefBlockPrefix ());
209+ assertNotNull (transaction .getContextFreeData ());
210+ assertTrue (transaction .getContextFreeData ().isEmpty ());
207211 }
208212
209213 @ Test
@@ -233,7 +237,8 @@ public void getOriginalTransaction() {
233237 assertEquals (expectedRefBlockNum , transaction .getRefBlockNum ());
234238 assertEquals (refBlockPrefix , transaction .getRefBlockPrefix ());
235239 assertNotNull (transaction .getRefBlockPrefix ());
236-
240+ assertNotNull (transaction .getContextFreeData ());
241+ assertTrue (transaction .getContextFreeData ().isEmpty ());
237242 } catch (TransactionSignError transactionSignError ) {
238243 transactionSignError .printStackTrace ();
239244 fail ("Exception should not be thrown here for calling sign" );
@@ -277,6 +282,22 @@ public void getSerializedTransaction() {
277282 }
278283 }
279284
285+ @ Test
286+ public void getSerializedContextFreeData () {
287+ this .mockDefaultSuccessData ();
288+ // Prepare has to be called before sign
289+ TransactionProcessor processor = createAndPrepareTransaction (this .defaultActions (), this .defaultContextFreeData ());
290+ assertNotNull (processor );
291+
292+ try {
293+ assertTrue (processor .sign ());
294+ assertEquals (MOCKED_CONTEXT_FREE_DATA_HEX , processor .getSerializedContextFreeData ());
295+ } catch (TransactionSignError transactionSignError ) {
296+ transactionSignError .printStackTrace ();
297+ fail ("Exception should not be thrown here for calling sign" );
298+ }
299+ }
300+
280301 @ Test
281302 public void getTransactionConfig () {
282303 this .mockDefaultSuccessData ();
@@ -349,7 +370,7 @@ public void isAllowTransactionToBeModified() {
349370 Utils .getGson (DateFormatter .BACKEND_DATE_PATTERN ).fromJson (MOCKED_PUSHTRANSACTION_RESPONE_JSON , PushTransactionResponse .class ));
350371
351372 this .mockAbiProvider (EOSIOTOKENABIJSON );
352- this .mockSerializationProvider (MOCKED_ACTION_HEX , MOCKED_TRANSACTION_HEX , mockedDeserilizedTransaction );
373+ this .mockSerializationProvider (MOCKED_ACTION_HEX , MOCKED_TRANSACTION_HEX , mockedDeserilizedTransaction , MOCKED_CONTEXT_FREE_DATA_HEX );
353374 this .mockSignatureProvider (Arrays .asList ("Key1" , "Key2" ),
354375 Utils .getGson (DateFormatter .BACKEND_DATE_PATTERN )
355376 .fromJson (mockedEosioTransactionSignatureResponseModifiedTransactionJSON , EosioTransactionSignatureResponse .class ));
@@ -516,6 +537,28 @@ public void testContextFreeActionPrepare() {
516537 }
517538 }
518539
540+ @ Test
541+ public void testContextFreeDataPrepare () {
542+ // Prepare and sign
543+ this .mockDefaultSuccessData ();
544+
545+ // Context free actions
546+ TransactionProcessor processor = session .getTransactionProcessor ();
547+ try {
548+ processor .prepare (this .defaultActions (), this .defaultActions (), this .defaultContextFreeData ());
549+ } catch (TransactionPrepareError transactionPrepareError ) {
550+ transactionPrepareError .printStackTrace ();
551+ fail ("Exception should not be thrown here for calling prepare." );
552+ }
553+
554+ try {
555+ assertNotEquals ("" , processor .serialize ());
556+ } catch (TransactionSerializeError transactionSerializeError ) {
557+ transactionSerializeError .printStackTrace ();
558+ fail ("Exception should not be thrown here for calling serialize." );
559+ }
560+ }
561+
519562 private void mockDefaultSuccessData () {
520563 this .mockRPC (
521564 Utils .getGson (DateFormatter .BACKEND_DATE_PATTERN ).fromJson (mockedGetInfoResponse , GetInfoResponse .class ),
@@ -524,7 +567,7 @@ private void mockDefaultSuccessData() {
524567 Utils .getGson (DateFormatter .BACKEND_DATE_PATTERN ).fromJson (MOCKED_PUSHTRANSACTION_RESPONE_JSON , PushTransactionResponse .class ));
525568
526569 this .mockAbiProvider (EOSIOTOKENABIJSON );
527- this .mockSerializationProvider (MOCKED_ACTION_HEX , MOCKED_TRANSACTION_HEX , mockedDeserilizedTransaction );
570+ this .mockSerializationProvider (MOCKED_ACTION_HEX , MOCKED_TRANSACTION_HEX , mockedDeserilizedTransaction , MOCKED_CONTEXT_FREE_DATA_HEX );
528571 this .mockSignatureProvider (Arrays .asList ("Key1" , "Key2" ),
529572 Utils .getGson (DateFormatter .BACKEND_DATE_PATTERN ).fromJson (mockedEosioTransactionSignatureResponseJSON , EosioTransactionSignatureResponse .class ));
530573 }
@@ -545,10 +588,23 @@ private List<Action> defaultActions() {
545588 return actions ;
546589 }
547590
548- private TransactionProcessor createAndPrepareTransaction (List <Action > actions ) {
591+ private List <String > defaultContextFreeData () {
592+ String contextFreeData1 = "test" ;
593+ String contextFreeData2 = "{\" some\" : \" jsonData\" }" ;
594+ String contextFreeData3 = "!@#$%^&*()_+" ;
595+
596+ ArrayList <String > contextFreeData = new ArrayList <String >();
597+ contextFreeData .add (contextFreeData1 );
598+ contextFreeData .add (contextFreeData2 );
599+ contextFreeData .add (contextFreeData3 );
600+
601+ return contextFreeData ;
602+ }
603+
604+ private TransactionProcessor createAndPrepareTransaction (List <Action > actions , List <String > contextFreeData ) {
549605 try {
550606 TransactionProcessor processor = session .getTransactionProcessor ();
551- processor .prepare (actions );
607+ processor .prepare (actions , new ArrayList < Action >(), contextFreeData );
552608 return processor ;
553609 } catch (TransactionPrepareError transactionPrepareError ) {
554610 transactionPrepareError .printStackTrace ();
@@ -557,6 +613,10 @@ private TransactionProcessor createAndPrepareTransaction(List<Action> actions) {
557613 }
558614 }
559615
616+ private TransactionProcessor createAndPrepareTransaction (List <Action > actions ) {
617+ return this .createAndPrepareTransaction (actions , new ArrayList <String >());
618+ }
619+
560620 private void mockRPC (
561621 @ Nullable GetInfoResponse getInfoResponse ,
562622 @ Nullable GetBlockResponse getBlockResponse ,
@@ -612,7 +672,8 @@ private void mockAbiProvider(String abiJSON) {
612672 private void mockSerializationProvider (
613673 @ Nullable final String mockedActionHex ,
614674 @ Nullable String mockedTransactionHex ,
615- @ Nullable String mockedDeserializedTransaction ) {
675+ @ Nullable String mockedDeserializedTransaction ,
676+ @ Nullable String mockedContextFreeDataHex ) {
616677
617678 if (mockedActionHex != null ) {
618679 try {
@@ -647,6 +708,15 @@ public Object answer(InvocationOnMock invocationOnMock) {
647708 fail ("Exception should not be thrown here for mocking deserializeTransaction" );
648709 }
649710 }
711+
712+ if (mockedContextFreeDataHex != null ) {
713+ try {
714+ when (this .mockedSerializationProvider .serializeData (any (ArrayList .class ))).thenReturn (mockedContextFreeDataHex );
715+ } catch (SerializeDataError deserializeTransactionError ) {
716+ deserializeTransactionError .printStackTrace ();
717+ fail ("Exception should not be thrown here for mocking serializeData" );
718+ }
719+ }
650720 }
651721
652722 private void mockSignatureProvider (List <String > mockedAvaialbleKeys , EosioTransactionSignatureResponse mockedResponse ) {
@@ -679,6 +749,9 @@ private void mockSignatureProvider(List<String> mockedAvaialbleKeys, EosioTransa
679749 private static final String MOCKED_SIGNATURE = "SIG_R1_KsHAyy6EvQq2E6c7oxzxCtus5Jd4wP8KZkSxuhZUfxprU56okEWFjopjwy7wGH4fAjJKgTcceG4iUhZGRsWfYiDaTK5X5y" ;
680750 private static final String MOCKED_CHAIN_ID = "Mocked chain id" ;
681751 private static final String MOCKED_TRANSACTION_HEX_MODIFIED = "1ec3a35c1a706e886c51000000000100a6823403ea3055000000572d3ccdcd01000000000000c03400000000a8ed32322a000000000000c034000000000000a682a08601000000000004454f530000000009536f6d657468696e6700" ;
752+ private static final String MOCKED_CONTEXT_FREE_DATA_HEX = "C21BFB5AD4B64BFD04838B3B14F0CE0C7B92136CAC69BFED41BEF92F95A9BB20" ;
753+
754+
682755
683756 // Expectation
684757 // headBlockTime + default 5 minutes
0 commit comments