Fix #680: Service Type checks should ignore case (#683)

This commit is contained in:
Sriharsha Chintalapani 2021-10-05 23:32:01 -07:00 committed by GitHub
parent 54ca20c189
commit 96001ca703
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 62 additions and 63 deletions

View File

@ -266,7 +266,7 @@ public abstract class DashboardRepository {
service.setDescription(serviceInstance.getDescription()); service.setDescription(serviceInstance.getDescription());
service.setName(serviceInstance.getName()); service.setName(serviceInstance.getName());
} else { } else {
throw new IllegalArgumentException(String.format("Invalid service type %s for the chart", service.getType())); throw new IllegalArgumentException(String.format("Invalid service type %s for the dashboard", service.getType()));
} }
return service; return service;
} }

View File

@ -129,44 +129,32 @@ public final class EntityUtil {
if (ref == null) { if (ref == null) {
return; return;
} }
switch (ref.getType()) { String entity = ref.getType();
case Entity.TEAM: if (entity.equalsIgnoreCase(Entity.TEAM)) {
TeamResource.addHref(uriInfo, ref); TeamResource.addHref(uriInfo, ref);
break; } else if (entity.equalsIgnoreCase(Entity.USER)) {
case Entity.USER:
UserResource.addHref(uriInfo, ref); UserResource.addHref(uriInfo, ref);
break; } else if (entity.equalsIgnoreCase(Entity.TABLE)) {
case Entity.TABLE:
TableResource.addHref(uriInfo, ref); TableResource.addHref(uriInfo, ref);
break; } else if (entity.equalsIgnoreCase(Entity.DATABASE)) {
case Entity.DATABASE:
DatabaseResource.addHref(uriInfo, ref); DatabaseResource.addHref(uriInfo, ref);
break; } else if (entity.equalsIgnoreCase(Entity.TOPIC)) {
case Entity.TOPIC:
TopicResource.addHref(uriInfo, ref); TopicResource.addHref(uriInfo, ref);
break; } else if (entity.equalsIgnoreCase(Entity.CHART)) {
case Entity.CHART:
ChartResource.addHref(uriInfo, ref); ChartResource.addHref(uriInfo, ref);
break; } else if (entity.equalsIgnoreCase(Entity.DASHBOARD)) {
case Entity.DASHBOARD:
DashboardResource.addHref(uriInfo, ref); DashboardResource.addHref(uriInfo, ref);
break; } else if (entity.equalsIgnoreCase(Entity.TASK)) {
case Entity.TASK:
TaskResource.addHref(uriInfo, ref); TaskResource.addHref(uriInfo, ref);
break; } else if (entity.equalsIgnoreCase(Entity.DATABASE_SERVICE)) {
case Entity.DATABASE_SERVICE:
DatabaseServiceResource.addHref(uriInfo, ref); DatabaseServiceResource.addHref(uriInfo, ref);
break; } else if (entity.equalsIgnoreCase(Entity.MESSAGING_SERVICE)) {
case Entity.MESSAGING_SERVICE:
MessagingServiceResource.addHref(uriInfo, ref); MessagingServiceResource.addHref(uriInfo, ref);
break; } else if (entity.equalsIgnoreCase(Entity.DASHBOARD_SERVICE)) {
case Entity.DASHBOARD_SERVICE:
DashboardServiceResource.addHref(uriInfo, ref); DashboardServiceResource.addHref(uriInfo, ref);
break; } else if (entity.equalsIgnoreCase(Entity.PIPELINE_SERVICE)) {
case Entity.PIPELINE_SERVICE:
PipelineServiceResource.addHref(uriInfo, ref); PipelineServiceResource.addHref(uriInfo, ref);
break; } else {
default:
throw EntityNotFoundException.byMessage(CatalogExceptionMessage.entityTypeNotFound(ref.getType())); throw EntityNotFoundException.byMessage(CatalogExceptionMessage.entityTypeNotFound(ref.getType()));
} }
} }
@ -421,31 +409,29 @@ public final class EntityUtil {
throws IOException { throws IOException {
String entityType = entityLink.getEntityType(); String entityType = entityLink.getEntityType();
String fqn = entityLink.getEntityId(); String fqn = entityLink.getEntityId();
switch (entityType) { if(entityType.equalsIgnoreCase(Entity.USER)) {
case Entity.USER:
return getEntityReference(EntityUtil.validate(fqn, userDAO.findByName(fqn), User.class)); return getEntityReference(EntityUtil.validate(fqn, userDAO.findByName(fqn), User.class));
case Entity.TEAM: } else if (entityType.equalsIgnoreCase(Entity.TEAM)) {
return getEntityReference(EntityUtil.validate(fqn, teamDAO.findByName(fqn), Team.class)); return getEntityReference(EntityUtil.validate(fqn, teamDAO.findByName(fqn), Team.class));
case Entity.TABLE: } else if (entityType.equalsIgnoreCase(Entity.TABLE)) {
return getEntityReference(EntityUtil.validate(fqn, tableDAO.findByFQN(fqn), Table.class)); return getEntityReference(EntityUtil.validate(fqn, tableDAO.findByFQN(fqn), Table.class));
case Entity.DATABASE: } else if (entityType.equalsIgnoreCase(Entity.DATABASE)) {
return getEntityReference(EntityUtil.validate(fqn, databaseDAO.findByFQN(fqn), Database.class)); return getEntityReference(EntityUtil.validate(fqn, databaseDAO.findByFQN(fqn), Database.class));
case Entity.METRICS: } else if (entityType.equalsIgnoreCase(Entity.METRICS)) {
return getEntityReference(EntityUtil.validate(fqn, metricsDAO.findByFQN(fqn), Metrics.class)); return getEntityReference(EntityUtil.validate(fqn, metricsDAO.findByFQN(fqn), Metrics.class));
case Entity.DASHBOARD: } else if (entityType.equalsIgnoreCase(Entity.DASHBOARD)) {
return getEntityReference(EntityUtil.validate(fqn, dashboardDAO.findByFQN(fqn), Dashboard.class)); return getEntityReference(EntityUtil.validate(fqn, dashboardDAO.findByFQN(fqn), Dashboard.class));
case Entity.REPORT: } else if (entityType.equalsIgnoreCase(Entity.REPORT)) {
return getEntityReference(EntityUtil.validate(fqn, reportDAO.findByFQN(fqn), Report.class)); return getEntityReference(EntityUtil.validate(fqn, reportDAO.findByFQN(fqn), Report.class));
case Entity.TOPIC: } else if (entityType.equalsIgnoreCase(Entity.TOPIC)) {
return getEntityReference(EntityUtil.validate(fqn, topicDAO.findByFQN(fqn), Topic.class)); return getEntityReference(EntityUtil.validate(fqn, topicDAO.findByFQN(fqn), Topic.class));
case Entity.TASK: } else if (entityType.equalsIgnoreCase(Entity.TASK)) {
return getEntityReference(EntityUtil.validate(fqn, topicDAO.findByFQN(fqn), Task.class)); return getEntityReference(EntityUtil.validate(fqn, topicDAO.findByFQN(fqn), Task.class));
default: } else {
throw EntityNotFoundException.byMessage(CatalogExceptionMessage.entityNotFound(entityType, fqn)); throw EntityNotFoundException.byMessage(CatalogExceptionMessage.entityNotFound(entityType, fqn));
} }
} }
public static UsageDetails getLatestUsage(UsageDAO usageDAO, UUID entityId) { public static UsageDetails getLatestUsage(UsageDAO usageDAO, UUID entityId) {
LOG.debug("Getting latest usage for {}", entityId); LOG.debug("Getting latest usage for {}", entityId);
UsageDetails details = usageDAO.getLatestUsage(entityId.toString()); UsageDetails details = usageDAO.getLatestUsage(entityId.toString());
@ -523,6 +509,7 @@ public final class EntityUtil {
}); });
} }
/** /**
* Apply tags {@code tagLabels} to the entity or field identified by {@code targetFQN} * Apply tags {@code tagLabels} to the entity or field identified by {@code targetFQN}
*/ */

View File

@ -36,7 +36,6 @@ import org.openmetadata.catalog.exception.CatalogExceptionMessage;
import org.openmetadata.catalog.resources.charts.ChartResourceTest; import org.openmetadata.catalog.resources.charts.ChartResourceTest;
import org.openmetadata.catalog.resources.dashboards.DashboardResource.DashboardList; import org.openmetadata.catalog.resources.dashboards.DashboardResource.DashboardList;
import org.openmetadata.catalog.resources.services.DashboardServiceResourceTest; import org.openmetadata.catalog.resources.services.DashboardServiceResourceTest;
import org.openmetadata.catalog.resources.tags.TagResourceTest;
import org.openmetadata.catalog.resources.teams.TeamResourceTest; import org.openmetadata.catalog.resources.teams.TeamResourceTest;
import org.openmetadata.catalog.resources.teams.UserResourceTest; import org.openmetadata.catalog.resources.teams.UserResourceTest;
import org.openmetadata.catalog.type.EntityReference; import org.openmetadata.catalog.type.EntityReference;
@ -55,7 +54,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors;
import static java.util.Collections.singletonList; import static java.util.Collections.singletonList;
import static javax.ws.rs.core.Response.Status.BAD_REQUEST; import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
@ -84,6 +82,7 @@ public class DashboardResourceTest extends CatalogApplicationTest {
public static EntityReference TEAM_OWNER1; public static EntityReference TEAM_OWNER1;
public static EntityReference SUPERSET_REFERENCE; public static EntityReference SUPERSET_REFERENCE;
public static EntityReference LOOKER_REFERENCE; public static EntityReference LOOKER_REFERENCE;
public static EntityReference SUPERSET_INVALID_SERVICE_REFERENCE;
public static List<EntityReference> CHART_REFERENCES; public static List<EntityReference> CHART_REFERENCES;
public static final TagLabel TIER_1 = new TagLabel().withTagFQN("Tier.Tier1"); public static final TagLabel TIER_1 = new TagLabel().withTagFQN("Tier.Tier1");
public static final TagLabel USER_ADDRESS_TAG_LABEL = new TagLabel().withTagFQN("User.Address"); public static final TagLabel USER_ADDRESS_TAG_LABEL = new TagLabel().withTagFQN("User.Address");
@ -102,6 +101,9 @@ public class DashboardResourceTest extends CatalogApplicationTest {
DashboardService service = DashboardServiceResourceTest.createService(createService, adminAuthHeaders()); DashboardService service = DashboardServiceResourceTest.createService(createService, adminAuthHeaders());
SUPERSET_REFERENCE = EntityUtil.getEntityReference(service); SUPERSET_REFERENCE = EntityUtil.getEntityReference(service);
SUPERSET_INVALID_SERVICE_REFERENCE = new EntityReference().withName("invalid_superset_service")
.withId(SUPERSET_REFERENCE.getId())
.withType("DashboardService1");
createService.withName("looker").withServiceType(DashboardServiceType.Looker); createService.withName("looker").withServiceType(DashboardServiceType.Looker);
service = DashboardServiceResourceTest.createService(createService, adminAuthHeaders()); service = DashboardServiceResourceTest.createService(createService, adminAuthHeaders());
@ -183,6 +185,16 @@ public class DashboardResourceTest extends CatalogApplicationTest {
TestUtils.assertResponseContains(exception, BAD_REQUEST, "service must not be null"); TestUtils.assertResponseContains(exception, BAD_REQUEST, "service must not be null");
} }
@Test
public void post_DashboardWithInvalidService_4xx(TestInfo test) {
CreateDashboard create = create(test).withService(SUPERSET_INVALID_SERVICE_REFERENCE);
HttpResponseException exception = assertThrows(HttpResponseException.class, () ->
createDashboard(create, adminAuthHeaders()));
TestUtils.assertResponseContains(exception, BAD_REQUEST, String.format("Invalid service type %s",
SUPERSET_INVALID_SERVICE_REFERENCE.getType().toString()));
}
@Test @Test
public void post_DashboardWithInvalidOwnerType_4xx(TestInfo test) { public void post_DashboardWithInvalidOwnerType_4xx(TestInfo test) {
EntityReference owner = new EntityReference().withId(TEAM1.getId()); /* No owner type is set */ EntityReference owner = new EntityReference().withId(TEAM1.getId()); /* No owner type is set */