Repository: helix Updated Branches: refs/heads/master 73c3f0ad8 -> 18aa67b6d
[HELIX-780] add task user content related api and added more tests Project: http://git-wip-us.apache.org/repos/asf/helix/repo Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/18aa67b6 Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/18aa67b6 Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/18aa67b6 Branch: refs/heads/master Commit: 18aa67b6d5c703e5b938b2f915f52a6ca856e889 Parents: 73c3f0a Author: Harry Zhang <[email protected]> Authored: Tue Oct 9 14:31:00 2018 -0700 Committer: Harry Zhang <[email protected]> Committed: Thu Nov 1 17:42:22 2018 -0700 ---------------------------------------------------------------------- .../server/resources/helix/JobAccessor.java | 11 +- .../server/resources/helix/TaskAccessor.java | 115 +++++++++++++++++++ .../resources/helix/WorkflowAccessor.java | 10 +- .../helix/rest/server/AbstractTestClass.java | 38 +++--- .../helix/rest/server/TestJobAccessor.java | 23 +++- .../helix/rest/server/TestTaskAccessor.java | 83 +++++++++++++ .../helix/rest/server/TestWorkflowAccessor.java | 23 +++- 7 files changed, 278 insertions(+), 25 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/18aa67b6/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/JobAccessor.java ---------------------------------------------------------------------- diff --git a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/JobAccessor.java b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/JobAccessor.java index a984428..5548bd3 100644 --- a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/JobAccessor.java +++ b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/JobAccessor.java @@ -181,7 +181,9 @@ public class JobAccessor extends AbstractHelixResource { Map<String, String> contentStore = taskDriver.getJobUserContentMap(workflowName, jobName); if (contentStore == null) { - return JSONRepresentation(Collections.emptyMap()); + return notFound(String.format( + "Unable to find content store. Workflow (%s) or Job (%s) does not exist.", + workflowName, jobName)); } return JSONRepresentation(contentStore); } catch (ZkNoNodeException e) { @@ -193,7 +195,7 @@ public class JobAccessor extends AbstractHelixResource { @POST @Path("{jobName}/userContent") - public Response updateWorkflowUserContent( + public Response updateJobUserContent( @PathParam("clusterId") String clusterId, @PathParam("workflowName") String workflowName, @PathParam("jobName") String jobName, @@ -225,6 +227,11 @@ public class JobAccessor extends AbstractHelixResource { default: return badRequest(String.format("Command \"%s\" is not supported!", cmd)); } + } catch (NullPointerException npe) { + // ZkCacheBasedDataAccessor would throw npe if workflow or job does not exist + return notFound(String.format( + "Unable to find content store. Workflow (%s) or Job (%s) does not exist.", + workflowName, jobName)); } catch (Exception e) { _logger.error("Failed to update user content store", e); return serverError(e); http://git-wip-us.apache.org/repos/asf/helix/blob/18aa67b6/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/TaskAccessor.java ---------------------------------------------------------------------- diff --git a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/TaskAccessor.java b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/TaskAccessor.java new file mode 100644 index 0000000..79290e1 --- /dev/null +++ b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/TaskAccessor.java @@ -0,0 +1,115 @@ +package org.apache.helix.rest.server.resources.helix; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.IOException; +import java.util.Collections; +import java.util.Map; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Response; +import org.I0Itec.zkclient.exception.ZkNoNodeException; +import org.apache.helix.task.TaskDriver; +import org.codehaus.jackson.type.TypeReference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Path("/clusters/{clusterId}/workflows/{workflowName}/jobs/{jobName}/tasks") +public class TaskAccessor extends AbstractHelixResource { + private static Logger _logger = LoggerFactory.getLogger(TaskAccessor.class.getName()); + + @GET + @Path("{taskPartitionId}/userContent") + public Response getTaskUserContent( + @PathParam("clusterId") String clusterId, + @PathParam("workflowName") String workflowName, + @PathParam("jobName") String jobName, + @PathParam("taskPartitionId") String taskPartitionid + ) { + TaskDriver taskDriver = getTaskDriver(clusterId); + try { + Map<String, String> contentStore = + taskDriver.getTaskUserContentMap(workflowName, jobName, taskPartitionid); + if (contentStore == null) { + return notFound(String.format( + "Unable to find content store. Workflow (%s) or Job (%s) or Task content store (%s) not created yet.", + workflowName, jobName, taskPartitionid)); + } + return JSONRepresentation(contentStore); + } catch (ZkNoNodeException e) { + return notFound(String.format( + "Unable to find content store. Workflow (%s) or Job (%s) not created yet.", + workflowName, jobName)); + } catch (Exception e) { + return serverError(e); + } + } + + @POST + @Path("{taskPartitionId}/userContent") + public Response updateTaskUserContent( + @PathParam("clusterId") String clusterId, + @PathParam("workflowName") String workflowName, + @PathParam("jobName") String jobName, + @PathParam("taskPartitionId") String taskPartitionid, + @QueryParam("command") String commandStr, + String content + ) { + Command cmd; + Map<String, String> contentMap = Collections.emptyMap(); + try { + contentMap = OBJECT_MAPPER.readValue(content, new TypeReference<Map<String, String>>() { + }); + } catch (IOException e) { + return badRequest(String + .format("Content %s cannot be deserialized to Map<String, String>. Err: %s", content, + e.getMessage())); + } + + try { + cmd = (commandStr == null || commandStr.isEmpty()) + ? Command.update + : Command.valueOf(commandStr); + } catch (IllegalArgumentException ie) { + return badRequest(String.format("Invalid command: %s. Err: %s", commandStr, ie.getMessage())); + } + + TaskDriver driver = getTaskDriver(clusterId); + try { + switch (cmd) { + case update: + driver.addOrUpdateTaskUserContentMap(workflowName, jobName, taskPartitionid, contentMap); + return OK(); + default: + return badRequest(String.format("Command \"%s\" is not supported!", cmd)); + } + } catch (NullPointerException npe) { + // ZkCacheBasedDataAccessor would throw npe if workflow or job does not exist + return notFound( + String.format("Workflow (%s) or job (%s) does not exist", workflowName, jobName)); + } catch (Exception e) { + _logger.error("Failed to update user content store", e); + return serverError(e); + } + } +} http://git-wip-us.apache.org/repos/asf/helix/blob/18aa67b6/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/WorkflowAccessor.java ---------------------------------------------------------------------- diff --git a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/WorkflowAccessor.java b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/WorkflowAccessor.java index ac6a53c..8b328a7 100644 --- a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/WorkflowAccessor.java +++ b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/WorkflowAccessor.java @@ -276,7 +276,10 @@ public class WorkflowAccessor extends AbstractHelixResource { Map<String, String> contentStore = taskDriver.getWorkflowUserContentMap(workflowId); if (contentStore == null) { - return JSONRepresentation(Collections.emptyMap()); + // ZkCacheBasedDataAccessor would throw npe if workflow or job does not exist + return notFound(String.format( + "Unable to find content store. Workflow (%s) does not exist.", + workflowId)); } return JSONRepresentation(contentStore); } catch (ZkNoNodeException e) { @@ -316,6 +319,11 @@ public class WorkflowAccessor extends AbstractHelixResource { default: return badRequest(String.format("Command \"%s\" is not supported!", cmd)); } + } catch (NullPointerException npe) { + // ZkCacheBasedDataAccessor would throw npe if workflow or job does not exist + return notFound(String.format( + "Unable to find content store. Workflow (%s) does not exist.", + workflowId)); } catch (Exception e) { _logger.error("Failed to update user content store", e); return serverError(e); http://git-wip-us.apache.org/repos/asf/helix/blob/18aa67b6/helix-rest/src/test/java/org/apache/helix/rest/server/AbstractTestClass.java ---------------------------------------------------------------------- diff --git a/helix-rest/src/test/java/org/apache/helix/rest/server/AbstractTestClass.java b/helix-rest/src/test/java/org/apache/helix/rest/server/AbstractTestClass.java index f59db1a..97b735e 100644 --- a/helix-rest/src/test/java/org/apache/helix/rest/server/AbstractTestClass.java +++ b/helix-rest/src/test/java/org/apache/helix/rest/server/AbstractTestClass.java @@ -19,6 +19,21 @@ package org.apache.helix.rest.server; * under the License. */ +import java.io.IOException; +import java.net.URI; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.logging.Level; +import javax.ws.rs.client.Entity; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Application; +import javax.ws.rs.core.Response; import org.I0Itec.zkclient.ZkServer; import org.apache.helix.AccessOption; import org.apache.helix.BaseDataAccessor; @@ -66,20 +81,6 @@ import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeSuite; import com.google.common.base.Joiner; -import javax.ws.rs.client.Entity; -import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.Application; -import javax.ws.rs.core.Response; -import java.io.IOException; -import java.net.URI; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.logging.Level; public class AbstractTestClass extends JerseyTestNg.ContainerPerClassTest { protected static final String ZK_ADDR = "localhost:2123"; @@ -389,10 +390,13 @@ public class AbstractTestClass extends JerseyTestNg.ContainerPerClassTest { _configAccessor.setResourceConfig(cluster, workflowName + "_" + JOB_PREFIX + i, job.build()); // add job content stores + ZNRecord contentStore = new ZNRecord(TaskUtil.USER_CONTENT_NODE); + contentStore.setMapField(TaskUtil + .getNamespacedTaskName(TaskUtil.getNamespacedJobName(workflowName, JOB_PREFIX + i), "0"), + Collections.<String, String>emptyMap()); propertyStore.create(Joiner.on("/") - .join(TaskConstants.REBALANCER_CONTEXT_ROOT, workflowName + "_" + JOB_PREFIX + i, - TaskUtil.USER_CONTENT_NODE), new ZNRecord(TaskUtil.USER_CONTENT_NODE), - AccessOption.PERSISTENT); + .join(TaskConstants.REBALANCER_CONTEXT_ROOT, workflowName + "_" + JOB_PREFIX + i, + TaskUtil.USER_CONTENT_NODE), contentStore, AccessOption.PERSISTENT); } return jobCfgs; } http://git-wip-us.apache.org/repos/asf/helix/blob/18aa67b6/helix-rest/src/test/java/org/apache/helix/rest/server/TestJobAccessor.java ---------------------------------------------------------------------- diff --git a/helix-rest/src/test/java/org/apache/helix/rest/server/TestJobAccessor.java b/helix-rest/src/test/java/org/apache/helix/rest/server/TestJobAccessor.java index 1cf377b..d1178ee 100644 --- a/helix-rest/src/test/java/org/apache/helix/rest/server/TestJobAccessor.java +++ b/helix-rest/src/test/java/org/apache/helix/rest/server/TestJobAccessor.java @@ -153,7 +153,6 @@ public class TestJobAccessor extends AbstractTestClass { Map<String, String> map1 = new HashMap<>(); map1.put("k1", "v1"); Entity entity = Entity.entity(OBJECT_MAPPER.writeValueAsString(map1), MediaType.APPLICATION_JSON_TYPE); - post(uri, ImmutableMap.of("command", "delete"), entity, Response.Status.BAD_REQUEST.getStatusCode()); post(uri, ImmutableMap.of("command", "update"), entity, Response.Status.OK.getStatusCode()); // update (add items) workflow content store @@ -169,10 +168,30 @@ public class TestJobAccessor extends AbstractTestClass { body = get(uri, Response.Status.OK.getStatusCode(), true); contentStore = OBJECT_MAPPER.readValue(body, new TypeReference<Map<String, String>>() {}); Assert.assertEquals(contentStore, map1); + } + @Test(dependsOnMethods = "testGetAddJobContent") + public void testInvalidGetAndUpdateJobContentStore() { + System.out.println("Start test :" + TestHelper.getTestMethodName()); + String validURI = "clusters/" + CLUSTER_NAME + "/workflows/Workflow_0/jobs/Job_0/userContent"; + String invalidURI1 = "clusters/" + CLUSTER_NAME + "/workflows/xxx/jobs/Job_0/userContent"; // workflow not exist + String invalidURI2 = "clusters/" + CLUSTER_NAME + "/workflows/Workflow_0/jobs/xxx/userContent"; // job not exist + Entity validEntity = Entity.entity("{\"k1\":\"v1\"}", MediaType.APPLICATION_JSON_TYPE); + Entity invalidEntity = Entity.entity("{\"k1\":{}}", MediaType.APPLICATION_JSON_TYPE); // not Map<String, String> + Map<String, String> validCmd = ImmutableMap.of("command", "update"); + Map<String, String> invalidCmd = ImmutableMap.of("command", "delete"); // cmd not supported + + get(invalidURI1, Response.Status.NOT_FOUND.getStatusCode(), false); + get(invalidURI2, Response.Status.NOT_FOUND.getStatusCode(), false); + + post(invalidURI1, validCmd, validEntity, Response.Status.NOT_FOUND.getStatusCode()); + post(invalidURI2, validCmd, validEntity, Response.Status.NOT_FOUND.getStatusCode()); + + post(validURI, invalidCmd, validEntity, Response.Status.BAD_REQUEST.getStatusCode()); + post(validURI, validCmd, invalidEntity, Response.Status.BAD_REQUEST.getStatusCode()); } - @Test(dependsOnMethods = "testCreateJob") + @Test(dependsOnMethods = "testInvalidGetAndUpdateJobContentStore") public void testDeleteJob() { System.out.println("Start test :" + TestHelper.getTestMethodName()); TaskDriver driver = getTaskDriver(CLUSTER_NAME); http://git-wip-us.apache.org/repos/asf/helix/blob/18aa67b6/helix-rest/src/test/java/org/apache/helix/rest/server/TestTaskAccessor.java ---------------------------------------------------------------------- diff --git a/helix-rest/src/test/java/org/apache/helix/rest/server/TestTaskAccessor.java b/helix-rest/src/test/java/org/apache/helix/rest/server/TestTaskAccessor.java new file mode 100644 index 0000000..575eae3 --- /dev/null +++ b/helix-rest/src/test/java/org/apache/helix/rest/server/TestTaskAccessor.java @@ -0,0 +1,83 @@ +package org.apache.helix.rest.server; + +import com.google.common.collect.ImmutableMap; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import org.apache.helix.TestHelper; +import org.codehaus.jackson.type.TypeReference; +import org.testng.Assert; +import org.testng.annotations.Test; + +public class TestTaskAccessor extends AbstractTestClass { + private final static String CLUSTER_NAME = "TestCluster_0"; + + @Test + public void testGetAddTaskUserContent() throws IOException { + System.out.println("Start test :" + TestHelper.getTestMethodName()); + String uri = "clusters/" + CLUSTER_NAME + "/workflows/Workflow_0/jobs/Job_0/tasks/0/userContent"; + String uriTaskDoesNotExist = "clusters/" + CLUSTER_NAME + "/workflows/Workflow_0/jobs/Job_0/tasks/xxx/userContent"; + + // Empty user content + String body = + get(uri, Response.Status.OK.getStatusCode(), true); + Map<String, String> + contentStore = OBJECT_MAPPER.readValue(body, new TypeReference<Map<String, String>>() {}); + Assert.assertTrue(contentStore.isEmpty()); + + // Post user content + Map<String, String> map1 = new HashMap<>(); + map1.put("k1", "v1"); + Entity entity = + Entity.entity(OBJECT_MAPPER.writeValueAsString(map1), MediaType.APPLICATION_JSON_TYPE); + post(uri, ImmutableMap.of("command", "update"), entity, Response.Status.OK.getStatusCode()); + post(uriTaskDoesNotExist, ImmutableMap.of("command", "update"), entity, Response.Status.OK.getStatusCode()); + + // get after post should work + body = get(uri, Response.Status.OK.getStatusCode(), true); + contentStore = OBJECT_MAPPER.readValue(body, new TypeReference<Map<String, String>>() { + }); + Assert.assertEquals(contentStore, map1); + body = get(uriTaskDoesNotExist, Response.Status.OK.getStatusCode(), true); + contentStore = OBJECT_MAPPER.readValue(body, new TypeReference<Map<String, String>>() { + }); + Assert.assertEquals(contentStore, map1); + + + // modify map1 and verify + map1.put("k1", "v2"); + map1.put("k2", "v2"); + entity = Entity.entity(OBJECT_MAPPER.writeValueAsString(map1), MediaType.APPLICATION_JSON_TYPE); + post(uri, ImmutableMap.of("command", "update"), entity, Response.Status.OK.getStatusCode()); + body = get(uri, Response.Status.OK.getStatusCode(), true); + contentStore = OBJECT_MAPPER.readValue(body, new TypeReference<Map<String, String>>() { + }); + Assert.assertEquals(contentStore, map1); + } + + @Test + public void testInvalidGetAddTaskUserContent() { + System.out.println("Start test :" + TestHelper.getTestMethodName()); + String validURI = "clusters/" + CLUSTER_NAME + "/workflows/Workflow_0/jobs/Job_0/tasks/0/userContent"; + String invalidURI1 = "clusters/" + CLUSTER_NAME + "/workflows/xxx/jobs/Job_0/tasks/0/userContent"; // workflow not exist + String invalidURI2 = "clusters/" + CLUSTER_NAME + "/workflows/Workflow_0/jobs/xxx/tasks/0/userContent"; // job not exist + String invalidURI3 = "clusters/" + CLUSTER_NAME + "/workflows/Workflow_0/jobs/xxx/tasks/xxx/userContent"; // task not exist + Entity validEntity = Entity.entity("{\"k1\":\"v1\"}", MediaType.APPLICATION_JSON_TYPE); + Entity invalidEntity = Entity.entity("{\"k1\":{}}", MediaType.APPLICATION_JSON_TYPE); // not Map<String, String> + Map<String, String> validCmd = ImmutableMap.of("command", "update"); + Map<String, String> invalidCmd = ImmutableMap.of("command", "delete"); // cmd not supported + + get(invalidURI1, Response.Status.NOT_FOUND.getStatusCode(), false); + get(invalidURI2, Response.Status.NOT_FOUND.getStatusCode(), false); + get(invalidURI3, Response.Status.NOT_FOUND.getStatusCode(), false); + + post(invalidURI1, validCmd, validEntity, Response.Status.NOT_FOUND.getStatusCode()); + post(invalidURI2, validCmd, validEntity, Response.Status.NOT_FOUND.getStatusCode()); + + post(validURI, invalidCmd, validEntity, Response.Status.BAD_REQUEST.getStatusCode()); + post(validURI, validCmd, invalidEntity, Response.Status.BAD_REQUEST.getStatusCode()); + } +} http://git-wip-us.apache.org/repos/asf/helix/blob/18aa67b6/helix-rest/src/test/java/org/apache/helix/rest/server/TestWorkflowAccessor.java ---------------------------------------------------------------------- diff --git a/helix-rest/src/test/java/org/apache/helix/rest/server/TestWorkflowAccessor.java b/helix-rest/src/test/java/org/apache/helix/rest/server/TestWorkflowAccessor.java index d622066..0f88841 100644 --- a/helix-rest/src/test/java/org/apache/helix/rest/server/TestWorkflowAccessor.java +++ b/helix-rest/src/test/java/org/apache/helix/rest/server/TestWorkflowAccessor.java @@ -18,6 +18,7 @@ import org.apache.helix.task.TaskState; import org.apache.helix.task.WorkflowConfig; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.type.TypeReference; +import org.glassfish.jersey.server.spi.ResponseErrorMapper; import org.testng.Assert; import org.testng.annotations.Test; @@ -140,7 +141,7 @@ public class TestWorkflowAccessor extends AbstractTestClass { TargetState.START); } - @Test(dependsOnMethods = "testCreateWorkflow") + @Test(dependsOnMethods = "testUpdateWorkflow") public void testGetAndUpdateWorkflowContentStore() throws IOException, InterruptedException { System.out.println("Start test :" + TestHelper.getTestMethodName()); String workflowName = "Workflow_0"; @@ -157,7 +158,6 @@ public class TestWorkflowAccessor extends AbstractTestClass { Map<String, String> map1 = new HashMap<>(); map1.put("k1", "v1"); Entity entity = Entity.entity(OBJECT_MAPPER.writeValueAsString(map1), MediaType.APPLICATION_JSON_TYPE); - post(uri, ImmutableMap.of("command", "delete"), entity, Response.Status.BAD_REQUEST.getStatusCode()); post(uri, ImmutableMap.of("command", "update"), entity, Response.Status.OK.getStatusCode()); // update (add items) workflow content store @@ -175,7 +175,24 @@ public class TestWorkflowAccessor extends AbstractTestClass { Assert.assertEquals(contentStore, map1); } - @Test(dependsOnMethods = "testUpdateWorkflow") + @Test(dependsOnMethods = "testGetAndUpdateWorkflowContentStore") + public void testInvalidGetAndUpdateWorkflowContentStore() { + System.out.println("Start test :" + TestHelper.getTestMethodName()); + String validURI = "clusters/" + CLUSTER_NAME + "/workflows/Workflow_0/userContent"; + String invalidURI = "clusters/" + CLUSTER_NAME + "/workflows/xxx/userContent"; // workflow not exist + Entity validEntity = Entity.entity("{\"k1\":\"v1\"}", MediaType.APPLICATION_JSON_TYPE); + Entity invalidEntity = Entity.entity("{\"k1\":{}}", MediaType.APPLICATION_JSON_TYPE); // not Map<String, String> + Map<String, String> validCmd = ImmutableMap.of("command", "update"); + Map<String, String> invalidCmd = ImmutableMap.of("command", "delete"); // cmd not supported + + get(invalidURI, Response.Status.NOT_FOUND.getStatusCode(), false); + post(invalidURI, validCmd, validEntity, Response.Status.NOT_FOUND.getStatusCode()); + + post(validURI, invalidCmd, validEntity, Response.Status.BAD_REQUEST.getStatusCode()); + post(validURI, validCmd, invalidEntity, Response.Status.BAD_REQUEST.getStatusCode()); + } + + @Test(dependsOnMethods = "testInvalidGetAndUpdateWorkflowContentStore") public void testDeleteWorkflow() throws InterruptedException { System.out.println("Start test :" + TestHelper.getTestMethodName()); TaskDriver driver = getTaskDriver(CLUSTER_NAME);
