use of org.bukkit.craftbukkit.v1_16_R3.entity in project entity-service by hypertrace.
the class EntityDataServiceTest method testEntityQueryAttributeWithExistsFiltering.
@Test
public void testEntityQueryAttributeWithExistsFiltering() {
String stringRandomizer1 = UUID.randomUUID().toString();
Entity entity1 = Entity.newBuilder().setTenantId(TENANT_ID).setEntityType(EntityType.K8S_POD.name()).setEntityName("Some Service").putIdentifyingAttributes(EntityConstants.getValue(CommonAttribute.COMMON_ATTRIBUTE_EXTERNAL_ID), AttributeValue.newBuilder().setValue(Value.newBuilder().setString("value1").build()).build()).putAttributes("simpleValue1" + "-" + stringRandomizer1, AttributeValue.newBuilder().setValue(Value.newBuilder().setString("StringValue1").build()).build()).build();
Entity createdEntity1 = entityDataServiceClient.upsert(entity1);
assertNotNull(createdEntity1.getEntityId());
String stringRandomizer2 = UUID.randomUUID().toString();
Entity entity2 = Entity.newBuilder().setTenantId(TENANT_ID).setEntityType(EntityType.K8S_POD.name()).setEntityName("Some Service").putIdentifyingAttributes(EntityConstants.getValue(CommonAttribute.COMMON_ATTRIBUTE_EXTERNAL_ID), AttributeValue.newBuilder().setValue(Value.newBuilder().setString("value2").build()).build()).putAttributes("simpleValue2" + "-" + stringRandomizer2, AttributeValue.newBuilder().setValue(Value.newBuilder().setString("StringValue2").build()).build()).putAttributes("test" + "-" + stringRandomizer2, AttributeValue.newBuilder().setValue(Value.newBuilder().setString("test").build()).build()).build();
Entity createdEntity2 = entityDataServiceClient.upsert(entity2);
assertNotNull(createdEntity2.getEntityId());
// test for exists operator
AttributeFilter existsFilter = AttributeFilter.newBuilder().setName(EntityConstants.attributeMapPathFor("simpleValue1" + "-" + stringRandomizer1)).setOperator(Operator.EXISTS).build();
List<Entity> entities = entityDataServiceClient.query(TENANT_ID, Query.newBuilder().setFilter(existsFilter).build());
assertEquals(1, entities.size());
assertEquals(createdEntity1, entities.get(0));
// test for not-exists operator
AttributeFilter notExistsFilter = AttributeFilter.newBuilder().setName(EntityConstants.attributeMapPathFor("simpleValue3")).setOperator(Operator.NOT_EXISTS).build();
entities = entityDataServiceClient.query(TENANT_ID, Query.newBuilder().setFilter(notExistsFilter).build());
assertTrue(entities.size() > 0);
// test with AND operator
AttributeFilter eqFilter = AttributeFilter.newBuilder().setName(EntityConstants.attributeMapPathFor("test" + "-" + stringRandomizer2)).setOperator(Operator.EQ).setAttributeValue(AttributeValue.newBuilder().setValue(Value.newBuilder().setString("test").build()).build()).build();
existsFilter = AttributeFilter.newBuilder().setName(EntityConstants.attributeMapPathFor("simpleValue2" + "-" + stringRandomizer2)).setOperator(Operator.EXISTS).build();
AttributeFilter andFilter = AttributeFilter.newBuilder().setOperator(Operator.AND).addChildFilter(eqFilter).addChildFilter(existsFilter).build();
entities = entityDataServiceClient.query(TENANT_ID, Query.newBuilder().setFilter(andFilter).build());
assertEquals(1, entities.size());
assertEquals(createdEntity2, entities.get(0));
// exists with attribute value - discard the value
existsFilter = AttributeFilter.newBuilder().setName(EntityConstants.attributeMapPathFor("simpleValue1" + "-" + stringRandomizer1)).setOperator(Operator.EXISTS).setAttributeValue(AttributeValue.newBuilder().setValue(Value.newBuilder().setString("StringValue").build()).build()).build();
entities = entityDataServiceClient.query(TENANT_ID, Query.newBuilder().setFilter(existsFilter).build());
assertEquals(1, entities.size());
assertEquals(createdEntity1, entities.get(0));
}
use of org.bukkit.craftbukkit.v1_16_R3.entity in project entity-service by hypertrace.
the class EntityDataServiceTest method testCreateV2EntityTypeWithoutIdentifyingAttributes.
@Test
public void testCreateV2EntityTypeWithoutIdentifyingAttributes() {
Entity firstInputEntity = Entity.newBuilder().setTenantId(TENANT_ID).setEntityType(TEST_ENTITY_TYPE_V2).setEntityId(UUID.randomUUID().toString()).setEntityName("Test entity v2").putAttributes("foo", AttributeValue.newBuilder().setValue(Value.newBuilder().setString("foo1")).build()).build();
Entity firstCreatedEntity = entityDataServiceClient.upsert(firstInputEntity);
assertNotSame(firstInputEntity, firstCreatedEntity);
assertEntityEquals(firstInputEntity, firstCreatedEntity);
Entity secondInputEntity = firstInputEntity.toBuilder().clearAttributes().build();
Entity secondCreatedEntity = entityDataServiceClient.upsert(secondInputEntity);
assertEntityEquals(firstCreatedEntity, secondCreatedEntity);
}
use of org.bukkit.craftbukkit.v1_16_R3.entity in project entity-service by hypertrace.
the class EntityDataServiceTest method testEntityQueryAttributeFiltering.
@Test
public void testEntityQueryAttributeFiltering() {
long timeBeforeQuery = System.currentTimeMillis();
String stringRandomizer = UUID.randomUUID().toString();
Entity entity = Entity.newBuilder().setTenantId(TENANT_ID).setEntityType(EntityType.K8S_POD.name()).setEntityName("Some Service").putIdentifyingAttributes(EntityConstants.getValue(CommonAttribute.COMMON_ATTRIBUTE_EXTERNAL_ID), AttributeValue.newBuilder().setValue(Value.newBuilder().setString("value1").build()).build()).putAttributes("simpleValue" + "-" + stringRandomizer, AttributeValue.newBuilder().setValue(Value.newBuilder().setString("StringValue").build()).build()).putAttributes("listValue" + "-" + stringRandomizer, AttributeValue.newBuilder().setValueList(AttributeValueList.newBuilder().addValues(AttributeValue.newBuilder().setValue(Value.newBuilder().setString("item1").build()).build()).addValues(AttributeValue.newBuilder().setValue(Value.newBuilder().setString("item2").build()).build()).build()).build()).putAttributes("mapValue" + "-" + stringRandomizer, AttributeValue.newBuilder().setValueMap(AttributeValueMap.newBuilder().putValues("nestedKey", AttributeValue.newBuilder().setValue(Value.newBuilder().setString("nestedValue").build()).build()).build()).build()).build();
Entity createdEntity = entityDataServiceClient.upsert(entity);
assertNotNull(createdEntity.getEntityId());
AttributeFilter stringFilter = AttributeFilter.newBuilder().setName(EntityConstants.attributeMapPathFor("simpleValue" + "-" + stringRandomizer)).setOperator(Operator.EQ).setAttributeValue(AttributeValue.newBuilder().setValue(Value.newBuilder().setString("StringValue").build()).build()).build();
List<Entity> entities1 = entityDataServiceClient.query(TENANT_ID, Query.newBuilder().setFilter(stringFilter).build());
Entity foundEntity1 = entities1.get(0);
assertEquals(createdEntity, foundEntity1);
// filter by createdTime, which is treated as attribute filtering because it should be able
// to support different operations like regular attribtues
AttributeFilter createTimeFilter = AttributeFilter.newBuilder().setName(EntityServiceConstants.ENTITY_CREATED_TIME).setOperator(Operator.GT).setAttributeValue(AttributeValue.newBuilder().setValue(Value.newBuilder().setLong(timeBeforeQuery).build()).build()).build();
List<Entity> entities11 = entityDataServiceClient.query(TENANT_ID, Query.newBuilder().setFilter(createTimeFilter).build());
Entity foundEntity11 = entities11.get(0);
assertEquals(createdEntity, foundEntity11);
AttributeFilter nestedFilter = AttributeFilter.newBuilder().setName(EntityConstants.attributeMapPathFor("mapValue" + "-" + stringRandomizer)).setOperator(Operator.EQ).setAttributeValue(AttributeValue.newBuilder().setValueMap(AttributeValueMap.newBuilder().putValues("nestedKey", AttributeValue.newBuilder().setValue(Value.newBuilder().setString("nestedValue").build()).build()).build()).build()).build();
List<Entity> entities2 = entityDataServiceClient.query(TENANT_ID, Query.newBuilder().setFilter(nestedFilter).build());
Entity foundEntity2 = entities2.get(0);
assertEquals(createdEntity, foundEntity2);
AttributeFilter listFilter = AttributeFilter.newBuilder().setName(EntityConstants.attributeMapPathFor("listValue" + "-" + stringRandomizer)).setOperator(Operator.EQ).setAttributeValue(AttributeValue.newBuilder().setValueList(AttributeValueList.newBuilder().addValues(AttributeValue.newBuilder().setValue(Value.newBuilder().setString("item1").build()).build()).addValues(AttributeValue.newBuilder().setValue(Value.newBuilder().setString("item2").build()).build()).build()).build()).build();
List<Entity> entities3 = entityDataServiceClient.query(TENANT_ID, Query.newBuilder().setFilter(listFilter).build());
Entity foundEntity3 = entities3.get(0);
assertEquals(createdEntity, foundEntity3);
AttributeFilter listInFilter = AttributeFilter.newBuilder().setName(EntityConstants.attributeMapPathFor("listValue" + "-" + stringRandomizer)).setOperator(Operator.CONTAINS).setAttributeValue(AttributeValue.newBuilder().setValueList(AttributeValueList.newBuilder().addValues(AttributeValue.newBuilder().setValue(Value.newBuilder().setString("item1").build()).build()).build()).build()).build();
List<Entity> entities4 = entityDataServiceClient.query(TENANT_ID, Query.newBuilder().setFilter(listInFilter).build());
Entity foundEntity4 = entities4.get(0);
assertEquals(createdEntity, foundEntity4);
}
use of org.bukkit.craftbukkit.v1_16_R3.entity in project entity-service by hypertrace.
the class EntityDataServiceTest method testUpdateEntityWithPredicateViaUpsertAndMerge.
@Test
public void testUpdateEntityWithPredicateViaUpsertAndMerge() {
// Scope this test to its own tenant for isolation
String TENANT_ID = EntityDataServiceTest.TENANT_ID + "testUpdateEntityWithPredicateViaUpsertAndMerge";
EntityDataServiceBlockingStub entityDataServiceStub = buildStubForTenant(TENANT_ID);
setupEntityTypes(channel, TENANT_ID);
Map<String, AttributeValue> createAttributes = Map.of("some-attr", stringValue("v1"));
Map<String, AttributeValue> updateAttributes = Map.of("some-attr", stringValue("v2"));
// Expect create and the first update to succeed, the second to fail
UpsertCondition condition = UpsertCondition.newBuilder().setPropertyPredicate(Predicate.newBuilder().setAttributeKey("some-attr").setOperator(PredicateOperator.PREDICATE_OPERATOR_EQUALS).setValue(stringValue("v1"))).build();
// V1 entity
Entity entityToCreate = Entity.newBuilder().setTenantId(TENANT_ID).setEntityType(EntityType.K8S_POD.name()).setEntityName("V1 UPDATE PREDICATE POD").putIdentifyingAttributes(EntityConstants.getValue(CommonAttribute.COMMON_ATTRIBUTE_EXTERNAL_ID), generateRandomUUIDAttrValue()).putAllAttributes(createAttributes).build();
// Successful create
Entity createdEntity = entityDataServiceStub.mergeAndUpsertEntity(MergeAndUpsertEntityRequest.newBuilder().setEntity(entityToCreate).setUpsertCondition(condition).build()).getEntity();
assertEquals(stringValue("v1"), createdEntity.getAttributesMap().get("some-attr"));
Entity entityUpdate = entityToCreate.toBuilder().putAllAttributes(updateAttributes).build();
Entity updatedEntity = entityDataServiceStub.mergeAndUpsertEntity(MergeAndUpsertEntityRequest.newBuilder().setEntity(entityUpdate).setUpsertCondition(condition).build()).getEntity();
// Successful update
assertEquals(stringValue("v2"), updatedEntity.getAttributesMap().get("some-attr"));
Entity secondEntityUpdate = entityToCreate.toBuilder().putAttributes("some-new-attr", stringValue("foo")).build();
Entity secondUpdatedEntity = entityDataServiceStub.mergeAndUpsertEntity(MergeAndUpsertEntityRequest.newBuilder().setEntity(secondEntityUpdate).setUpsertCondition(condition).build()).getEntity();
// No change, update rejected
assertFalse(secondUpdatedEntity.getAttributesMap().containsKey("some-new-attr"));
assertEquals(stringValue("v2"), secondUpdatedEntity.getAttributesMap().get("some-attr"));
// V2 Entity
entityToCreate = Entity.newBuilder().setTenantId(TENANT_ID).setEntityId(UUID.randomUUID().toString()).setEntityType(TEST_ENTITY_TYPE_V2).setEntityName("V2 entity predicate update").putAllAttributes(createAttributes).build();
// Successful create
createdEntity = entityDataServiceStub.mergeAndUpsertEntity(MergeAndUpsertEntityRequest.newBuilder().setEntity(entityToCreate).setUpsertCondition(condition).build()).getEntity();
assertEquals(stringValue("v1"), createdEntity.getAttributesMap().get("some-attr"));
entityUpdate = entityToCreate.toBuilder().putAllAttributes(updateAttributes).build();
updatedEntity = entityDataServiceStub.mergeAndUpsertEntity(MergeAndUpsertEntityRequest.newBuilder().setEntity(entityUpdate).setUpsertCondition(condition).build()).getEntity();
// Successful update
assertEquals(stringValue("v2"), updatedEntity.getAttributesMap().get("some-attr"));
secondEntityUpdate = entityToCreate.toBuilder().putAttributes("some-new-attr", stringValue("foo")).build();
secondUpdatedEntity = entityDataServiceStub.mergeAndUpsertEntity(MergeAndUpsertEntityRequest.newBuilder().setEntity(secondEntityUpdate).setUpsertCondition(condition).build()).getEntity();
// No change, update rejected
assertFalse(secondUpdatedEntity.getAttributesMap().containsKey("some-new-attr"));
assertEquals(stringValue("v2"), secondUpdatedEntity.getAttributesMap().get("some-attr"));
}
use of org.bukkit.craftbukkit.v1_16_R3.entity in project entity-service by hypertrace.
the class EntityDataServiceTest method testEntityQueryOrderBy.
@Test
public void testEntityQueryOrderBy() {
Entity entity1 = Entity.newBuilder().setTenantId(TENANT_ID).setEntityType(EntityType.K8S_POD.name()).setEntityName("Some Service 1").putIdentifyingAttributes(EntityConstants.getValue(CommonAttribute.COMMON_ATTRIBUTE_EXTERNAL_ID), generateRandomUUIDAttrValue()).putAttributes("foo", AttributeValue.newBuilder().setValue(Value.newBuilder().setInt(5).build()).build()).build();
Entity createdEntity1 = entityDataServiceClient.upsert(entity1);
assertNotNull(createdEntity1);
assertNotNull(createdEntity1.getEntityId().trim());
Entity entity2 = Entity.newBuilder().setTenantId(TENANT_ID).setEntityType(EntityType.K8S_POD.name()).setEntityName("Some Service 2").putIdentifyingAttributes(EntityConstants.getValue(CommonAttribute.COMMON_ATTRIBUTE_EXTERNAL_ID), generateRandomUUIDAttrValue()).putAttributes("foo", AttributeValue.newBuilder().setValue(Value.newBuilder().setInt(10).build()).build()).build();
Entity createdEntity2 = entityDataServiceClient.upsert(entity2);
assertNotNull(createdEntity2);
assertNotNull(createdEntity2.getEntityId().trim());
// Query by field name
Query entityNameQuery = Query.newBuilder().setEntityType(EntityType.K8S_POD.name()).addOrderBy(OrderByExpression.newBuilder().setOrder(SortOrder.DESC).setName("entityName").build()).build();
List<Entity> entitiesList = entityDataServiceClient.query(TENANT_ID, entityNameQuery);
assertTrue(entitiesList.size() > 1);
assertTrue(entitiesList.contains(createdEntity1) && entitiesList.contains(createdEntity2));
// ordered such that entity with "larger" entity name value is listed earlier
assertTrue(entitiesList.indexOf(createdEntity2) < entitiesList.indexOf(createdEntity1));
// Query by attribute
Query attributeQuery = Query.newBuilder().setEntityType(EntityType.K8S_POD.name()).addOrderBy(OrderByExpression.newBuilder().setOrder(SortOrder.DESC).setName("attributes.foo").build()).build();
entitiesList = entityDataServiceClient.query(TENANT_ID, attributeQuery);
assertTrue(entitiesList.size() > 1);
assertTrue(entitiesList.contains(createdEntity1) && entitiesList.contains(createdEntity2));
// ordered such that entity with "larger" attributes value is listed earlier
assertTrue(entitiesList.indexOf(createdEntity2) < entitiesList.indexOf(createdEntity1));
}
Aggregations