mirror of https://github.com/dapr/java-sdk.git
				
				
				
			Adds IT to confirm eTag is parsed correctly to/from runtime. (#475)
This commit is contained in:
		
							parent
							
								
									1527d31640
								
							
						
					
					
						commit
						5147ad0202
					
				|  | @ -9,8 +9,8 @@ import io.dapr.client.DaprClient; | |||
| import io.dapr.client.domain.State; | ||||
| import io.dapr.client.domain.StateOptions; | ||||
| import io.dapr.client.domain.TransactionalStateOperation; | ||||
| import io.dapr.exceptions.DaprException; | ||||
| import io.dapr.it.BaseIT; | ||||
| import org.junit.Assert; | ||||
| import org.junit.Test; | ||||
| import reactor.core.publisher.Mono; | ||||
| 
 | ||||
|  | @ -20,7 +20,11 @@ import java.util.List; | |||
| import java.util.UUID; | ||||
| 
 | ||||
| import static org.junit.Assert.assertEquals; | ||||
| import static org.junit.Assert.assertNotEquals; | ||||
| import static org.junit.Assert.assertNotNull; | ||||
| import static org.junit.Assert.assertNull; | ||||
| import static org.junit.Assert.assertThrows; | ||||
| import static org.junit.Assert.assertTrue; | ||||
| 
 | ||||
| /** | ||||
|  * Common test cases for Dapr client (GRPC and HTTP). | ||||
|  | @ -53,11 +57,11 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     State<MyData> myDataResponse = response.block(); | ||||
| 
 | ||||
|     //Assert that the response is the correct one | ||||
|     Assert.assertNotNull(myDataResponse.getEtag()); | ||||
|     Assert.assertNotNull(myDataResponse.getKey()); | ||||
|     Assert.assertNotNull(myDataResponse.getValue()); | ||||
|     Assert.assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     Assert.assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
|     assertNotNull(myDataResponse.getEtag()); | ||||
|     assertNotNull(myDataResponse.getKey()); | ||||
|     assertNotNull(myDataResponse.getValue()); | ||||
|     assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
|   } | ||||
| 
 | ||||
|   @Test | ||||
|  | @ -68,10 +72,10 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
| 
 | ||||
|     State<String> state = (State<String>) | ||||
|         daprClient.getState(STATE_STORE_NAME, new State(stateKey), String.class).block(); | ||||
|     Assert.assertNotNull(state); | ||||
|     Assert.assertEquals("unknownKey", state.getKey()); | ||||
|     Assert.assertNull(state.getValue()); | ||||
|     Assert.assertNull(state.getEtag()); | ||||
|     assertNotNull(state); | ||||
|     assertEquals("unknownKey", state.getKey()); | ||||
|     assertNull(state.getValue()); | ||||
|     assertNull(state.getEtag()); | ||||
|   } | ||||
| 
 | ||||
|   @Test | ||||
|  | @ -146,8 +150,8 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     State<MyData> myDataResponse = response.block(); | ||||
| 
 | ||||
|     //review that the update was success action | ||||
|     Assert.assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     Assert.assertEquals("data in property B2", myDataResponse.getValue().getPropertyB()); | ||||
|     assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     assertEquals("data in property B2", myDataResponse.getValue().getPropertyB()); | ||||
|   } | ||||
| 
 | ||||
|   @Test | ||||
|  | @ -174,8 +178,8 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     State<MyData> myDataResponse = response.block(); | ||||
| 
 | ||||
|     //review that the state was saved correctly | ||||
|     Assert.assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     Assert.assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
|     assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
| 
 | ||||
|     //create deferred action to delete the state | ||||
|     Mono<Void> deleteResponse = daprClient.deleteState(STATE_STORE_NAME, stateKey, null, null); | ||||
|  | @ -188,7 +192,7 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     myDataResponse = response.block(); | ||||
| 
 | ||||
|     //review that the action does not return any value, because the state was deleted | ||||
|     Assert.assertNull(myDataResponse.getValue()); | ||||
|     assertNull(myDataResponse.getValue()); | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|  | @ -215,11 +219,11 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     State<MyData> myDataResponse = response.block(); | ||||
| 
 | ||||
|     //review that the etag is not empty | ||||
|     Assert.assertNotNull(myDataResponse.getEtag()); | ||||
|     Assert.assertNotNull(myDataResponse.getKey()); | ||||
|     Assert.assertNotNull(myDataResponse.getValue()); | ||||
|     Assert.assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     Assert.assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
|     assertNotNull(myDataResponse.getEtag()); | ||||
|     assertNotNull(myDataResponse.getKey()); | ||||
|     assertNotNull(myDataResponse.getValue()); | ||||
|     assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
| 
 | ||||
|     String firstETag = myDataResponse.getEtag(); | ||||
| 
 | ||||
|  | @ -236,13 +240,13 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     myDataResponse = response.block(); | ||||
| 
 | ||||
|     //review that state value changes | ||||
|     Assert.assertNotNull(myDataResponse.getEtag()); | ||||
|     assertNotNull(myDataResponse.getEtag()); | ||||
|     //review that the etag changes after an update | ||||
|     Assert.assertNotEquals(firstETag, myDataResponse.getEtag()); | ||||
|     Assert.assertNotNull(myDataResponse.getKey()); | ||||
|     Assert.assertNotNull(myDataResponse.getValue()); | ||||
|     Assert.assertEquals("data in property A2", myDataResponse.getValue().getPropertyA()); | ||||
|     Assert.assertEquals("data in property B2", myDataResponse.getValue().getPropertyB()); | ||||
|     assertNotEquals(firstETag, myDataResponse.getEtag()); | ||||
|     assertNotNull(myDataResponse.getKey()); | ||||
|     assertNotNull(myDataResponse.getValue()); | ||||
|     assertEquals("data in property A2", myDataResponse.getValue().getPropertyA()); | ||||
|     assertEquals("data in property B2", myDataResponse.getValue().getPropertyB()); | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|  | @ -269,11 +273,11 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     State<MyData> myDataResponse = response.block(); | ||||
| 
 | ||||
|     //review that the etag is not empty | ||||
|     Assert.assertNotNull(myDataResponse.getEtag()); | ||||
|     Assert.assertNotNull(myDataResponse.getKey()); | ||||
|     Assert.assertNotNull(myDataResponse.getValue()); | ||||
|     Assert.assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     Assert.assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
|     assertNotNull(myDataResponse.getEtag()); | ||||
|     assertNotNull(myDataResponse.getKey()); | ||||
|     assertNotNull(myDataResponse.getValue()); | ||||
|     assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
| 
 | ||||
|     String firstETag = myDataResponse.getEtag(); | ||||
| 
 | ||||
|  | @ -290,13 +294,13 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     myDataResponse = response.block(); | ||||
| 
 | ||||
|     //review that state value changes | ||||
|     Assert.assertNotNull(myDataResponse.getEtag()); | ||||
|     assertNotNull(myDataResponse.getEtag()); | ||||
|     //review that the etag changes after an update | ||||
|     Assert.assertNotEquals(firstETag, myDataResponse.getEtag()); | ||||
|     Assert.assertNotNull(myDataResponse.getKey()); | ||||
|     Assert.assertNotNull(myDataResponse.getValue()); | ||||
|     Assert.assertEquals("data in property A2", myDataResponse.getValue().getPropertyA()); | ||||
|     Assert.assertEquals("data in property B2", myDataResponse.getValue().getPropertyB()); | ||||
|     assertNotEquals(firstETag, myDataResponse.getEtag()); | ||||
|     assertNotNull(myDataResponse.getKey()); | ||||
|     assertNotNull(myDataResponse.getValue()); | ||||
|     assertEquals("data in property A2", myDataResponse.getValue().getPropertyA()); | ||||
|     assertEquals("data in property B2", myDataResponse.getValue().getPropertyB()); | ||||
|   } | ||||
| 
 | ||||
|   @Test | ||||
|  | @ -319,11 +323,11 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     //execute the get state | ||||
|     State<MyData> myDataResponse = response.block(); | ||||
| 
 | ||||
|     Assert.assertNotNull(myDataResponse.getEtag()); | ||||
|     Assert.assertNotNull(myDataResponse.getKey()); | ||||
|     Assert.assertNotNull(myDataResponse.getValue()); | ||||
|     Assert.assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     Assert.assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
|     assertNotNull(myDataResponse.getEtag()); | ||||
|     assertNotNull(myDataResponse.getKey()); | ||||
|     assertNotNull(myDataResponse.getValue()); | ||||
|     assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
| 
 | ||||
|     //Create deferred action to delete an state sending the etag | ||||
|     Mono<Void> deleteResponse = daprClient.deleteState(STATE_STORE_NAME, stateKey, myDataResponse.getEtag(), null); | ||||
|  | @ -335,7 +339,7 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     myDataResponse = response.block(); | ||||
| 
 | ||||
|     //Review that the response is null, because the state was deleted | ||||
|     Assert.assertNull(myDataResponse.getValue()); | ||||
|     assertNull(myDataResponse.getValue()); | ||||
|   } | ||||
| 
 | ||||
| 
 | ||||
|  | @ -360,11 +364,11 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     //execute the get state | ||||
|     State<MyData> myDataResponse = response.block(); | ||||
| 
 | ||||
|     Assert.assertNotNull(myDataResponse.getEtag()); | ||||
|     Assert.assertNotNull(myDataResponse.getKey()); | ||||
|     Assert.assertNotNull(myDataResponse.getValue()); | ||||
|     Assert.assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     Assert.assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
|     assertNotNull(myDataResponse.getEtag()); | ||||
|     assertNotNull(myDataResponse.getKey()); | ||||
|     assertNotNull(myDataResponse.getValue()); | ||||
|     assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
| 
 | ||||
|     //Create deferred action to delete an state sending the incorrect etag | ||||
|     Mono<Void> deleteResponse = daprClient.deleteState(STATE_STORE_NAME, stateKey, "99999999999", null); | ||||
|  | @ -376,7 +380,7 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     myDataResponse = response.block(); | ||||
| 
 | ||||
|     //Review that the response is null, because the state was deleted | ||||
|     Assert.assertNull(myDataResponse.getValue()); | ||||
|     assertNull(myDataResponse.getValue()); | ||||
|   } | ||||
| 
 | ||||
|   @Test(expected = RuntimeException.class) | ||||
|  | @ -406,11 +410,11 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     //execute the retrieve of the state using options | ||||
|     State<MyData> myDataResponse = response.block(); | ||||
| 
 | ||||
|     Assert.assertNotNull(myDataResponse.getEtag()); | ||||
|     Assert.assertNotNull(myDataResponse.getKey()); | ||||
|     Assert.assertNotNull(myDataResponse.getValue()); | ||||
|     Assert.assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     Assert.assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
|     assertNotNull(myDataResponse.getEtag()); | ||||
|     assertNotNull(myDataResponse.getKey()); | ||||
|     assertNotNull(myDataResponse.getValue()); | ||||
|     assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
| 
 | ||||
|     //change data to be udpated | ||||
|     data.setPropertyA("data in property A2"); | ||||
|  | @ -431,12 +435,12 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     response = daprClient.getState(STATE_STORE_NAME, new State(stateKey, null, stateOptions), MyData.class); | ||||
|     State<MyData> myLastDataResponse = response.block(); | ||||
| 
 | ||||
|     Assert.assertNotNull(myLastDataResponse.getEtag()); | ||||
|     Assert.assertNotNull(myLastDataResponse.getKey()); | ||||
|     Assert.assertNotNull(myLastDataResponse.getValue()); | ||||
|     Assert.assertNotNull(myDataResponse.getEtag(), myLastDataResponse.getEtag()); | ||||
|     Assert.assertEquals("data in property A2", myLastDataResponse.getValue().getPropertyA()); | ||||
|     Assert.assertEquals("data in property B2", myLastDataResponse.getValue().getPropertyB()); | ||||
|     assertNotNull(myLastDataResponse.getEtag()); | ||||
|     assertNotNull(myLastDataResponse.getKey()); | ||||
|     assertNotNull(myLastDataResponse.getValue()); | ||||
|     assertNotNull(myDataResponse.getEtag(), myLastDataResponse.getEtag()); | ||||
|     assertEquals("data in property A2", myLastDataResponse.getValue().getPropertyA()); | ||||
|     assertEquals("data in property B2", myLastDataResponse.getValue().getPropertyB()); | ||||
|   } | ||||
| 
 | ||||
|   @Test() | ||||
|  | @ -465,11 +469,11 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     //execute the retrieve of the state using options | ||||
|     State<MyData> myDataResponse = response.block(); | ||||
| 
 | ||||
|     Assert.assertNotNull(myDataResponse.getEtag()); | ||||
|     Assert.assertNotNull(myDataResponse.getKey()); | ||||
|     Assert.assertNotNull(myDataResponse.getValue()); | ||||
|     Assert.assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     Assert.assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
|     assertNotNull(myDataResponse.getEtag()); | ||||
|     assertNotNull(myDataResponse.getKey()); | ||||
|     assertNotNull(myDataResponse.getValue()); | ||||
|     assertEquals("data in property A", myDataResponse.getValue().getPropertyA()); | ||||
|     assertEquals("data in property B", myDataResponse.getValue().getPropertyB()); | ||||
| 
 | ||||
|     //change data to be udpated | ||||
|     data.setPropertyA("data in property A2"); | ||||
|  | @ -490,12 +494,12 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     response = daprClient.getState(STATE_STORE_NAME, new State(stateKey, null, stateOptions), MyData.class); | ||||
|     State<MyData> myLastDataResponse = response.block(); | ||||
| 
 | ||||
|     Assert.assertNotNull(myLastDataResponse.getEtag()); | ||||
|     Assert.assertNotNull(myLastDataResponse.getKey()); | ||||
|     Assert.assertNotNull(myLastDataResponse.getValue()); | ||||
|     Assert.assertNotNull(myDataResponse.getEtag(), myLastDataResponse.getEtag()); | ||||
|     Assert.assertEquals("last write", myLastDataResponse.getValue().getPropertyA()); | ||||
|     Assert.assertEquals("data in property B2", myLastDataResponse.getValue().getPropertyB()); | ||||
|     assertNotNull(myLastDataResponse.getEtag()); | ||||
|     assertNotNull(myLastDataResponse.getKey()); | ||||
|     assertNotNull(myLastDataResponse.getValue()); | ||||
|     assertNotNull(myDataResponse.getEtag(), myLastDataResponse.getEtag()); | ||||
|     assertEquals("last write", myLastDataResponse.getValue().getPropertyA()); | ||||
|     assertEquals("data in property B2", myLastDataResponse.getValue().getPropertyB()); | ||||
|   } | ||||
| 
 | ||||
|   @Test | ||||
|  | @ -525,10 +529,10 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     State<String> myDataResponse = response.block(); | ||||
| 
 | ||||
|     //Assert that the response is the correct one | ||||
|     Assert.assertNotNull(myDataResponse.getEtag()); | ||||
|     Assert.assertNotNull(myDataResponse.getKey()); | ||||
|     Assert.assertNotNull(myDataResponse.getValue()); | ||||
|     Assert.assertEquals("my state 3", myDataResponse.getValue()); | ||||
|     assertNotNull(myDataResponse.getEtag()); | ||||
|     assertNotNull(myDataResponse.getKey()); | ||||
|     assertNotNull(myDataResponse.getValue()); | ||||
|     assertEquals("my state 3", myDataResponse.getValue()); | ||||
|     operation = createTransactionalStateOperation( | ||||
|         TransactionalStateOperation.OperationType.DELETE, | ||||
|         createState(stateKey, null, null, data)); | ||||
|  | @ -541,7 +545,7 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     State<String> deletedData = response.block(); | ||||
| 
 | ||||
|     //Review that the response is null, because the state was deleted | ||||
|     Assert.assertNull(deletedData.getValue()); | ||||
|     assertNull(deletedData.getValue()); | ||||
|   } | ||||
| 
 | ||||
|   @Test | ||||
|  | @ -561,7 +565,7 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|         TransactionalStateOperation.OperationType.UPSERT, | ||||
|         createState(stateKey, null, null, data)); | ||||
| 
 | ||||
|     Assert.assertNotNull(daprClient); | ||||
|     assertNotNull(daprClient); | ||||
|     //create of the deferred call to DAPR to execute the transaction | ||||
|     Mono<Void> saveResponse = daprClient.executeStateTransaction(STATE_STORE_NAME, Collections.singletonList(operation)); | ||||
|     //execute the save action | ||||
|  | @ -574,11 +578,11 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     State<MyData> myDataResponse = response.block(); | ||||
| 
 | ||||
|     //Assert that the response is the correct one | ||||
|     Assert.assertNotNull(myDataResponse.getEtag()); | ||||
|     Assert.assertNotNull(myDataResponse.getKey()); | ||||
|     Assert.assertNotNull(myDataResponse.getValue()); | ||||
|     Assert.assertEquals("data in property AA", myDataResponse.getValue().getPropertyA()); | ||||
|     Assert.assertEquals("data in property BA", myDataResponse.getValue().getPropertyB()); | ||||
|     assertNotNull(myDataResponse.getEtag()); | ||||
|     assertNotNull(myDataResponse.getKey()); | ||||
|     assertNotNull(myDataResponse.getValue()); | ||||
|     assertEquals("data in property AA", myDataResponse.getValue().getPropertyA()); | ||||
|     assertEquals("data in property BA", myDataResponse.getValue().getPropertyB()); | ||||
| 
 | ||||
|     operation = createTransactionalStateOperation( | ||||
|         TransactionalStateOperation.OperationType.DELETE, | ||||
|  | @ -592,7 +596,17 @@ public abstract class AbstractStateClientIT extends BaseIT { | |||
|     State<MyData> deletedData = response.block(); | ||||
| 
 | ||||
|     //Review that the response is null, because the state was deleted | ||||
|     Assert.assertNull(deletedData.getValue()); | ||||
|     assertNull(deletedData.getValue()); | ||||
|   } | ||||
| 
 | ||||
|   @Test | ||||
|   public void testInvalidEtag() { | ||||
|     DaprClient daprClient = buildDaprClient(); | ||||
|     DaprException exception = assertThrows(DaprException.class, | ||||
|         () -> daprClient.saveState(STATE_STORE_NAME, "myKey", "badEtag", "value", null).block()); | ||||
|     assertNotNull(exception.getMessage()); | ||||
|     // This will assert that eTag is parsed correctly and is not corrupted. The quotation from runtime helps here. | ||||
|     assertTrue(exception.getMessage().contains("\"badEtag\"")); | ||||
|   } | ||||
| 
 | ||||
|   private <T> TransactionalStateOperation<T> createTransactionalStateOperation( | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue