blob: 63c050cd877274cf757382b9b64a002c07ef7741 [file] [log] [blame]
/*
* 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.
*/
package org.apache.submarine.server.submitter.k8s;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import io.kubernetes.client.openapi.models.V1DeleteOptions;
import io.kubernetes.client.openapi.models.V1JobCondition;
import io.kubernetes.client.openapi.models.V1JobConditionBuilder;
import io.kubernetes.client.openapi.models.V1JobStatus;
import io.kubernetes.client.openapi.models.V1JobStatusBuilder;
import io.kubernetes.client.openapi.models.V1Status;
import io.kubernetes.client.openapi.models.V1StatusBuilder;
import org.apache.submarine.server.api.exception.InvalidSpecException;
import org.apache.submarine.server.api.experiment.Experiment;
import org.apache.submarine.server.api.spec.ExperimentSpec;
import org.apache.submarine.server.submitter.k8s.model.mljob.MLJobFactory;
import org.apache.submarine.server.submitter.k8s.util.MLJobConverter;
import org.apache.submarine.server.submitter.k8s.model.mljob.MLJob;
import org.joda.time.DateTime;
import org.junit.Assert;
import org.junit.Test;
public class MLJobConverterTest extends SpecBuilder {
@Test
public void testMLJob2Job() throws IOException, URISyntaxException, InvalidSpecException {
// Accepted Status
ExperimentSpec spec = (ExperimentSpec) buildFromJsonFile(ExperimentSpec.class, tfJobReqFile);
MLJob mlJob = MLJobFactory.getMLJob(spec);
V1JobStatus status = new V1JobStatusBuilder().build();
mlJob.setStatus(status);
Experiment experiment = MLJobConverter.toJobFromMLJob(mlJob);
Assert.assertNull(experiment.getStatus());
Assert.assertNull(experiment.getStatus());
// Created Status
DateTime startTime = new DateTime();
mlJob.getStatus().setStartTime(startTime);
List<V1JobCondition> conditions = new ArrayList<>();
DateTime createdTime = new DateTime();
V1JobCondition condition = new V1JobConditionBuilder().withStatus("True")
.withType("Created").withLastTransitionTime(createdTime).build();
conditions.add(condition);
mlJob.getStatus().setConditions(conditions);
experiment = MLJobConverter.toJobFromMLJob(mlJob);
Assert.assertEquals(Experiment.Status.STATUS_CREATED.getValue(), experiment.getStatus());
Assert.assertEquals(startTime.toString(), experiment.getCreatedTime());
// Running Status
DateTime runningTime = new DateTime();
condition = new V1JobConditionBuilder().withStatus("True")
.withType("Running").withLastTransitionTime(runningTime).build();
conditions.add(condition);
mlJob.getStatus().setConditions(conditions);
experiment = MLJobConverter.toJobFromMLJob(mlJob);
Assert.assertEquals(Experiment.Status.STATUS_RUNNING.toString(), experiment.getStatus());
Assert.assertEquals(runningTime.toString(), experiment.getRunningTime());
// Succeeded Status
DateTime finishedTime = new DateTime();
mlJob.getStatus().setCompletionTime(finishedTime);
condition = new V1JobConditionBuilder().withStatus("True")
.withType("Succeeded").withLastTransitionTime(runningTime).build();
conditions.add(condition);
mlJob.getStatus().setConditions(conditions);
experiment = MLJobConverter.toJobFromMLJob(mlJob);
Assert.assertEquals(Experiment.Status.STATUS_SUCCEEDED.toString(), experiment.getStatus());
Assert.assertEquals(finishedTime.toString(), experiment.getFinishedTime());
}
@Test
public void testStatus2Job() {
V1Status status = new V1StatusBuilder().withStatus("Success").build();
Experiment experiment = MLJobConverter.toJobFromStatus(status);
Assert.assertNotNull(experiment);
Assert.assertEquals(Experiment.Status.STATUS_DELETED.getValue(), experiment.getStatus());
}
@Test
public void testMLJob2DeleteOptions() throws IOException, URISyntaxException,
InvalidSpecException {
ExperimentSpec spec = (ExperimentSpec) buildFromJsonFile(ExperimentSpec.class, tfJobReqFile);
MLJob mlJob = MLJobFactory.getMLJob(spec);
V1DeleteOptions options = MLJobConverter.toDeleteOptionsFromMLJob(mlJob);
Assert.assertNotNull(options);
Assert.assertEquals(mlJob.getApiVersion(), options.getApiVersion());
}
}