/*
*
* Copyright 2015 Netflix, Inc.
*
* Licensed 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 com.netflix.genie.common.dto;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.netflix.genie.test.categories.UnitTest;
import org.hamcrest.Matchers;
import org.junit.Assert;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.UUID;
/**
* Unit tests for the JobRequest class.
*
* @author tgianos
* @since 3.0.0
*/
@Category(UnitTest.class)
public class JobRequestUnitTests {
private static final String NAME = UUID.randomUUID().toString();
private static final String USER = UUID.randomUUID().toString();
private static final String VERSION = UUID.randomUUID().toString();
private static final String COMMAND_ARGS = UUID.randomUUID().toString();
private static final List<ClusterCriteria> CLUSTER_CRITERIAS = Lists.newArrayList(
new ClusterCriteria(
Sets.newHashSet(UUID.randomUUID().toString(), UUID.randomUUID().toString())
),
new ClusterCriteria(
Sets.newHashSet(UUID.randomUUID().toString(), UUID.randomUUID().toString())
),
new ClusterCriteria(
Sets.newHashSet(UUID.randomUUID().toString(), UUID.randomUUID().toString())
)
);
private static final Set<String> COMMAND_CRITERIA = Sets.newHashSet(
UUID.randomUUID().toString(),
UUID.randomUUID().toString()
);
/**
* Test to make sure can build a valid JobRequest using the builder.
*/
@Test
public void canBuildJobRequest() {
final JobRequest request
= new JobRequest.Builder(NAME, USER, VERSION, COMMAND_ARGS, CLUSTER_CRITERIAS, COMMAND_CRITERIA).build();
Assert.assertThat(request.getName(), Matchers.is(NAME));
Assert.assertThat(request.getUser(), Matchers.is(USER));
Assert.assertThat(request.getVersion(), Matchers.is(VERSION));
Assert.assertThat(request.getCommandArgs(), Matchers.is(COMMAND_ARGS));
Assert.assertThat(request.getClusterCriterias(), Matchers.is(CLUSTER_CRITERIAS));
Assert.assertThat(request.getCommandCriteria(), Matchers.is(COMMAND_CRITERIA));
Assert.assertFalse(request.getCpu().isPresent());
Assert.assertThat(request.isDisableLogArchival(), Matchers.is(false));
Assert.assertFalse(request.getEmail().isPresent());
Assert.assertThat(request.getDependencies(), Matchers.empty());
Assert.assertFalse(request.getGroup().isPresent());
Assert.assertFalse(request.getMemory().isPresent());
Assert.assertFalse(request.getSetupFile().isPresent());
Assert.assertFalse(request.getCreated().isPresent());
Assert.assertFalse(request.getDescription().isPresent());
Assert.assertFalse(request.getId().isPresent());
Assert.assertThat(request.getTags(), Matchers.empty());
Assert.assertFalse(request.getUpdated().isPresent());
Assert.assertThat(request.getApplications(), Matchers.empty());
Assert.assertFalse(request.getTimeout().isPresent());
}
/**
* Test to make sure can build a valid JobRequest with optional parameters.
*
* @throws Exception on error
*/
@Test
public void canBuildJobRequestWithOptionals() throws Exception {
final JobRequest.Builder builder
= new JobRequest.Builder(NAME, USER, VERSION, COMMAND_ARGS, CLUSTER_CRITERIAS, COMMAND_CRITERIA);
final int cpu = 5;
builder.withCpu(cpu);
final boolean disableLogArchival = true;
builder.withDisableLogArchival(disableLogArchival);
final String email = UUID.randomUUID().toString() + "@netflix.com";
builder.withEmail(email);
final Set<String> dependencies = Sets.newHashSet(
UUID.randomUUID().toString(),
UUID.randomUUID().toString(),
UUID.randomUUID().toString()
);
builder.withDependencies(dependencies);
final String group = UUID.randomUUID().toString();
builder.withGroup(group);
final int memory = 2048;
builder.withMemory(memory);
final String setupFile = UUID.randomUUID().toString();
builder.withSetupFile(setupFile);
final Date created = new Date();
builder.withCreated(created);
final String description = UUID.randomUUID().toString();
builder.withDescription(description);
final String id = UUID.randomUUID().toString();
builder.withId(id);
final Set<String> tags = Sets.newHashSet(
UUID.randomUUID().toString(),
UUID.randomUUID().toString(),
UUID.randomUUID().toString()
);
builder.withTags(tags);
final Date updated = new Date();
builder.withUpdated(updated);
final List<String> applications = Lists.newArrayList(
UUID.randomUUID().toString(),
UUID.randomUUID().toString(),
UUID.randomUUID().toString(),
UUID.randomUUID().toString()
);
builder.withApplications(applications);
final int timeout = 8970243;
builder.withTimeout(timeout);
final JobRequest request = builder.build();
Assert.assertThat(request.getName(), Matchers.is(NAME));
Assert.assertThat(request.getUser(), Matchers.is(USER));
Assert.assertThat(request.getVersion(), Matchers.is(VERSION));
Assert.assertThat(request.getCommandArgs(), Matchers.is(COMMAND_ARGS));
Assert.assertThat(request.getClusterCriterias(), Matchers.is(CLUSTER_CRITERIAS));
Assert.assertThat(request.getCommandCriteria(), Matchers.is(COMMAND_CRITERIA));
Assert.assertThat(request.getCpu().orElseThrow(IllegalArgumentException::new), Matchers.is(cpu));
Assert.assertThat(request.isDisableLogArchival(), Matchers.is(disableLogArchival));
Assert.assertThat(request.getEmail().orElseThrow(IllegalArgumentException::new), Matchers.is(email));
Assert.assertThat(request.getDependencies(), Matchers.is(dependencies));
Assert.assertThat(request.getGroup().orElseThrow(IllegalArgumentException::new), Matchers.is(group));
Assert.assertThat(request.getMemory().orElseThrow(IllegalArgumentException::new), Matchers.is(memory));
Assert.assertThat(request.getSetupFile().orElseThrow(IllegalArgumentException::new), Matchers.is(setupFile));
Assert.assertThat(request.getCreated().orElseThrow(IllegalArgumentException::new), Matchers.is(created));
Assert.assertThat(
request.getDescription().orElseThrow(IllegalArgumentException::new), Matchers.is(description)
);
Assert.assertThat(request.getId().orElseThrow(IllegalArgumentException::new), Matchers.is(id));
Assert.assertThat(request.getTags(), Matchers.is(tags));
Assert.assertThat(request.getUpdated().orElseThrow(IllegalArgumentException::new), Matchers.is(updated));
Assert.assertThat(request.getApplications(), Matchers.is(applications));
Assert.assertThat(request.getTimeout().orElseThrow(IllegalArgumentException::new), Matchers.is(timeout));
}
/**
* Test to make sure a JobRequest can be successfully built when nulls are inputted.
*/
@Test
public void canBuildJobRequestWithNulls() {
final JobRequest.Builder builder = new JobRequest.Builder(NAME, USER, VERSION, COMMAND_ARGS, null, null);
builder.withEmail(null);
builder.withDependencies(null);
builder.withGroup(null);
builder.withSetupFile(null);
builder.withCreated(null);
builder.withDescription(null);
builder.withId(null);
builder.withTags(null);
builder.withUpdated(null);
builder.withApplications(null);
final JobRequest request = builder.build();
Assert.assertThat(request.getName(), Matchers.is(NAME));
Assert.assertThat(request.getUser(), Matchers.is(USER));
Assert.assertThat(request.getVersion(), Matchers.is(VERSION));
Assert.assertThat(request.getCommandArgs(), Matchers.is(COMMAND_ARGS));
Assert.assertThat(request.getClusterCriterias(), Matchers.empty());
Assert.assertThat(request.getCommandCriteria(), Matchers.empty());
Assert.assertFalse(request.getCpu().isPresent());
Assert.assertThat(request.isDisableLogArchival(), Matchers.is(false));
Assert.assertFalse(request.getEmail().isPresent());
Assert.assertThat(request.getDependencies(), Matchers.empty());
Assert.assertFalse(request.getGroup().isPresent());
Assert.assertFalse(request.getMemory().isPresent());
Assert.assertFalse(request.getSetupFile().isPresent());
Assert.assertFalse(request.getCreated().isPresent());
Assert.assertFalse(request.getDescription().isPresent());
Assert.assertFalse(request.getId().isPresent());
Assert.assertThat(request.getTags(), Matchers.empty());
Assert.assertFalse(request.getUpdated().isPresent());
Assert.assertThat(request.getApplications(), Matchers.empty());
Assert.assertFalse(request.getTimeout().isPresent());
}
/**
* Test equals.
*/
@Test
public void canFindEquality() {
final JobRequest.Builder builder = new JobRequest.Builder(NAME, USER, VERSION, COMMAND_ARGS, null, null);
builder.withEmail(null);
builder.withDependencies(null);
builder.withGroup(null);
builder.withSetupFile(null);
builder.withCreated(null);
builder.withDescription(null);
builder.withId(UUID.randomUUID().toString());
builder.withTags(null);
builder.withUpdated(null);
builder.withApplications(null);
final JobRequest jobRequest1 = builder.build();
final JobRequest jobRequest2 = builder.build();
builder.withId(UUID.randomUUID().toString());
final JobRequest jobRequest3 = builder.build();
Assert.assertTrue(jobRequest1.equals(jobRequest2));
Assert.assertTrue(jobRequest2.equals(jobRequest1));
Assert.assertFalse(jobRequest1.equals(jobRequest3));
}
/**
* Test hash code.
*/
@Test
public void canUseHashCode() {
final JobRequest.Builder builder = new JobRequest.Builder(NAME, USER, VERSION, COMMAND_ARGS, null, null);
builder.withEmail(null);
builder.withDependencies(null);
builder.withGroup(null);
builder.withSetupFile(null);
builder.withCreated(null);
builder.withDescription(null);
builder.withId(UUID.randomUUID().toString());
builder.withTags(null);
builder.withUpdated(null);
builder.withApplications(null);
final JobRequest jobRequest1 = builder.build();
final JobRequest jobRequest2 = builder.build();
builder.withId(UUID.randomUUID().toString());
final JobRequest jobRequest3 = builder.build();
Assert.assertEquals(jobRequest1.hashCode(), jobRequest2.hashCode());
Assert.assertNotEquals(jobRequest1.hashCode(), jobRequest3.hashCode());
}
}