functionaltests.RestSchedulerTagTest.java Source code

Java tutorial

Introduction

Here is the source code for functionaltests.RestSchedulerTagTest.java

Source

/*
 * ProActive Parallel Suite(TM):
 * The Open Source library for parallel and distributed
 * Workflows & Scheduling, Orchestration, Cloud Automation
 * and Big Data Analysis on Enterprise Grids & Clouds.
 *
 * Copyright (c) 2007 - 2017 ActiveEon
 * Contact: contact@activeeon.com
 *
 * This library is free software: you can redistribute it and/or
 * modify it under the terms of the GNU Affero General Public License
 * as published by the Free Software Foundation: version 3 of
 * the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 *
 * If needed, contact us to obtain a release under GPL Version 2 or 3
 * or a different license than the AGPL.
 */
package functionaltests;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.ow2.proactive.scheduler.common.Scheduler;
import org.ow2.proactive.scheduler.common.SchedulerState;
import org.ow2.proactive.scheduler.common.job.JobId;
import org.ow2.proactive.scheduler.common.job.JobState;
import org.ow2.proactive.scheduler.common.job.JobStatus;
import org.ow2.proactive.scheduler.common.task.TaskState;
import org.ow2.proactive_grid_cloud_portal.scheduler.WorkflowSubmitter;

/**
 * Created by the activeeon team.
 */
public class RestSchedulerTagTest extends AbstractRestFuncTestCase {

    private static Scheduler scheduler;

    private static JobId submittedJobId = null;

    @BeforeClass
    public static void beforeClass() throws Exception {
        System.out.println(Thread.currentThread().getStackTrace());
        System.out.println("Initialize Test Class: " + RestSchedulerTagTest.class.toString());
        init();
        System.out.println("Finished Initialize Test Class: " + RestSchedulerTagTest.class.toString());

    }

    @Before
    public void submitWorkflowWhichIsUSedByAllTestCasesOnce() throws Exception {
        if (submittedJobId == null) {
            System.out.println("Setup - no jobId found: Remove all jobs from scheduler");
            scheduler = RestFuncTHelper.getScheduler();
            SchedulerState state = scheduler.getState();
            List<JobState> jobStates = new ArrayList<>();
            jobStates.addAll(state.getPendingJobs());
            jobStates.addAll(state.getRunningJobs());
            jobStates.addAll(state.getFinishedJobs());
            for (JobState jobState : jobStates) {
                JobId jobId = jobState.getId();
                scheduler.killJob(jobId);
                scheduler.removeJob(jobId);
            }
            System.out.println("Scheduler was cleaned.");
            System.out.println("Submit job for test cases.");
            //submit a job with a loop and out and err outputs
            System.out.println("submit a job with loop, out and err outputs");
            submittedJobId = submitJob("flow_loop_out.xml");
        }
        System.out.println("Finished setup test case.");
    }

    private JobId submitJob(String filename) throws Exception {
        File jobFile = new File(this.getClass().getResource("config/" + filename).toURI());
        WorkflowSubmitter submitter = new WorkflowSubmitter(scheduler);
        JobId id = submitter.submit(jobFile, new HashMap<String, String>());
        waitJobState(id, JobStatus.FINISHED, 500000);
        return id;
    }

    private HttpResponse sendRequest(String url) throws Exception {
        String schedulerUrl = getResourceUrl(url);
        HttpGet httpGet = new HttpGet(schedulerUrl);
        setSessionHeader(httpGet);
        HttpResponse response = executeUriRequest(httpGet);
        assertHttpStatusOK(response);
        return response;
    }

    @Test
    public void testTaskIdsByTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tag/LOOP-T2-1");
        JSONObject jsonObject = toJsonObject(response);
        JSONArray taskIds = (JSONArray) jsonObject.get("list");

        System.out.println(jsonObject.toJSONString());
        assertTrue(taskIds.contains("T1#1"));
        assertTrue(taskIds.contains("Print1#1"));
        assertTrue(taskIds.contains("Print2#1"));
        assertTrue(taskIds.contains("T2#1"));
        assertEquals("4", jsonObject.get("size").toString());
    }

    @Test
    public void testTaskIdsByUnknownTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tag/unknownTag");
        JSONObject jsonObject = toJsonObject(response);

        System.out.println(jsonObject.toJSONString());
        assertEquals("0", jsonObject.get("size").toString());
    }

    @Test
    public void testTaskStatesByTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/taskstates/LOOP-T2-1");
        JSONObject jsonObject = toJsonObject(response);

        System.out.println(jsonObject.toJSONString());
        assertEquals("4", jsonObject.get("size").toString());
    }

    @Test
    public void testTaskStatesByUnknownTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/taskstates/unknownTag");
        JSONObject jsonObject = toJsonObject(response);

        System.out.println(jsonObject.toJSONString());
        assertEquals("0", jsonObject.get("size").toString());
    }

    @Test
    public void testTaskLogAllByTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tag/LOOP-T2-1/result/log/all");
        String responseContent = getContent(response);

        System.out.println(responseContent);

        assertEquals(2, StringUtils.countMatches(responseContent, "Task 1 : Test STDERR"));
        assertEquals(2, StringUtils.countMatches(responseContent, "Task 1 : Test STDOUT"));
        assertEquals(2, StringUtils.countMatches(responseContent, "Terminate task number 1"));
    }

    @Test
    public void testTaskLogAllByUnknownTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tag/unknownTag/result/log/all");
        String responseContent = getContent(response);

        assertEquals("", responseContent);
    }

    @Test
    public void testTaskLogErrByTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tag/LOOP-T2-1/result/log/err");
        String responseContent = getContent(response);

        System.out.println(responseContent);

        assertEquals(2, StringUtils.countMatches(responseContent, "Task 1 : Test STDERR"));
    }

    @Test
    public void testTaskLogErrByUnknownTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tag/unknownTag/result/log/err");
        String responseContent = getContent(response);

        assertEquals("", responseContent);
    }

    @Test
    public void testTaskLogOutByTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tag/LOOP-T2-1/result/log/out");
        String responseContent = getContent(response);

        System.out.println(responseContent);

        assertEquals(2, StringUtils.countMatches(responseContent, "Task 1 : Test STDOUT"));
        assertEquals(2, StringUtils.countMatches(responseContent, "Terminate task number 1"));
    }

    @Test
    public void testTaskLogOutByUnknownTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tag/unknownTag/result/log/all");
        String responseContent = getContent(response);

        assertEquals("", responseContent);
    }

    @Test
    public void testTaskLogServerByTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tag/LOOP-T2-1/log/server");
        String responseContent = getContent(response);

        for (TaskState state : scheduler.getJobState(submittedJobId).getTasksByTag("LOOP-T2-1")) {
            assertTrue(responseContent.contains("Task " + state.getId() + " logs"));
        }
    }

    @Test
    public void testTaskLogSeverByUnknownTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tag/unknownTag/log/server");
        String responseContent = getContent(response);

        assertTrue(!responseContent.contains("TaskLogger"));
    }

    //FIXME
    @Test
    public void testTaskResultByTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tag/LOOP-T2-1/result");
        JSONArray jsonArray = toJsonArray(response);

        System.out.println(jsonArray.toJSONString());

        ArrayList<String> taskNames = new ArrayList<>(4);
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject id = (JSONObject) ((JSONObject) jsonArray.get(i)).get("id");
            String name = (String) id.get("readableName");
            taskNames.add(name);
        }

        assertTrue(taskNames.contains("T1#1"));
        assertTrue(taskNames.contains("Print1#1"));
        assertTrue(taskNames.contains("Print2#1"));
        assertTrue(taskNames.contains("T2#1"));
        assertEquals(4, jsonArray.size());
    }

    @Test
    public void testTaskResultByUnknownTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tag/unknownTag/result");
        JSONArray jsonArray = toJsonArray(response);

        System.out.println(jsonArray.toJSONString());
        assertEquals(0, jsonArray.size());
    }

    @Test
    public void testTaskResultValueByTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tag/LOOP-T2-1/result/value");
        JSONObject jsonObject = toJsonObject(response);

        System.out.println(jsonObject.toJSONString());

        assertTrue(jsonObject.containsKey("T1#1"));
        assertTrue(jsonObject.containsKey("Print1#1"));
        assertTrue(jsonObject.containsKey("Print2#1"));
        assertTrue(jsonObject.containsKey("T2#1"));
        assertEquals(4, jsonObject.size());
    }

    @Test
    public void testTaskResultValueByUnknownTag() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tag/unknownTag/result/value");
        JSONObject jsonObject = toJsonObject(response);

        System.out.println(jsonObject.toJSONString());
        assertEquals(0, jsonObject.size());
    }

    @Test
    public void testTaskResultSerializedvalueByTag() throws Exception {
        HttpResponse response = sendRequest(
                "jobs/" + submittedJobId + "/tasks/tag/LOOP-T2-1/result/serializedvalue");
        JSONObject jsonObject = toJsonObject(response);

        System.out.println(jsonObject.toJSONString());

        assertTrue(jsonObject.containsKey("T1#1"));
        assertTrue(jsonObject.containsKey("Print1#1"));
        assertTrue(jsonObject.containsKey("Print2#1"));
        assertTrue(jsonObject.containsKey("T2#1"));
        assertEquals(4, jsonObject.size());
    }

    @Test
    public void testTaskResultSerializedvalueByUnknownTag() throws Exception {
        HttpResponse response = sendRequest(
                "jobs/" + submittedJobId + "/tasks/tag/unknownTag/result/serializedvalue");
        JSONObject jsonObject = toJsonObject(response);

        System.out.println(jsonObject.toJSONString());
        assertEquals(0, jsonObject.size());
    }

    @Test
    public void testJobTags() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tags");
        JSONArray jsonArray = toJsonArray(response);

        System.out.println(jsonArray.toJSONString());

        assertTrue(jsonArray.contains("LOOP-T2-1"));
        assertTrue(jsonArray.contains("LOOP-T2-2"));
        assertTrue(jsonArray.contains("LOOP-T2-3"));
        assertTrue(jsonArray.contains("REPLICATE-T3-1"));
        assertTrue(jsonArray.contains("REPLICATE-T3-2"));
        assertEquals(5, jsonArray.size());
    }

    @Test
    public void testJobTagsPrefix() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tags/startsWith/LOOP");
        JSONArray jsonArray = toJsonArray(response);

        System.out.println(jsonArray.toJSONString());

        assertTrue(jsonArray.contains("LOOP-T2-1"));
        assertTrue(jsonArray.contains("LOOP-T2-2"));
        assertTrue(jsonArray.contains("LOOP-T2-3"));
        assertEquals(3, jsonArray.size());
    }

    @Test
    public void testJobTagsBadPrefix() throws Exception {
        HttpResponse response = sendRequest("jobs/" + submittedJobId + "/tasks/tags/startsWith/blabla");
        JSONArray jsonArray = toJsonArray(response);

        System.out.println(jsonArray.toJSONString());

        assertEquals(0, jsonArray.size());
    }

}