package com.sixsq.slipstream.run;
/*
* +=================================================================+
* SlipStream Server (WAR)
* =====
* Copyright (C) 2013 SixSq Sarl (sixsq.com)
* =====
* 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.
* -=================================================================-
*/
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import java.lang.reflect.InvocationTargetException;
import com.sixsq.slipstream.event.Event;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.w3c.dom.Document;
import com.sixsq.slipstream.es.CljElasticsearchHelper;
import com.sixsq.slipstream.exceptions.SlipStreamException;
import com.sixsq.slipstream.exceptions.ValidationException;
import com.sixsq.slipstream.factory.RunFactory;
import com.sixsq.slipstream.persistence.DeploymentModule;
import com.sixsq.slipstream.persistence.Metadata;
import com.sixsq.slipstream.persistence.Run;
import com.sixsq.slipstream.persistence.RunType;
import com.sixsq.slipstream.persistence.RuntimeParameter;
import com.sixsq.slipstream.persistence.User;
import com.sixsq.slipstream.util.CommonTestUtil;
import com.sixsq.slipstream.util.SerializationUtil;
public class RuntimeParameterTest {
private static User user;
@BeforeClass
public static void setupClass() throws ValidationException, InstantiationException, IllegalAccessException,
InvocationTargetException, NoSuchMethodException, ClassNotFoundException {
Event.muteForTests();
CljElasticsearchHelper.createAndInitTestDb();
user = CommonTestUtil.createTestUser();
CommonTestUtil.addSshKeys(user);
CommonTestUtil.resetAndLoadConnector(com.sixsq.slipstream.connector.local.LocalConnector.class);
}
@AfterClass
public static void teardownClass() {
CommonTestUtil.deleteUser(user);
}
@Test(expected = ValidationException.class)
public void nullRun() throws SlipStreamException {
new RuntimeParameter(null, "node.1:dummy", "ok", "ok");
}
@Test(expected = ValidationException.class)
public void nullParameterName() throws SlipStreamException {
DeploymentModule deployment = CommonTestUtil.createDeployment();
Run run = RunFactory.getRun(deployment, RunType.Orchestration, user);
run.assignRuntimeParameter(null, "ok", null);
CommonTestUtil.deleteDeployment(deployment);
}
@Test
public void serializationWorks() throws SlipStreamException {
DeploymentModule deployment = CommonTestUtil.createDeployment();
Run run = RunFactory.getRun(deployment, RunType.Orchestration, user);
Metadata parameter = run.assignRuntimeParameter("node.1:dummy", "ok", null);
String serialization = SerializationUtil.toXmlString(parameter);
assertNotNull(serialization);
assertFalse("".equals(serialization));
Document document = SerializationUtil.toXmlDocument(parameter);
assertNotNull(document);
CommonTestUtil.deleteDeployment(deployment);
}
@Test
public void checkValidNames() throws SlipStreamException {
DeploymentModule deployment = CommonTestUtil.createDeployment();
String[] validNames = { "ss:a", "orchestrator:a", "machine:a",
"host.1:a", "host1.2:a", "ss.1:a", "orchestrator.1:a",
"orchestrator-with-da-shes:a", "machine.1:a",
"host1.2:with.dots", "host1.2:with-dash",
"host1.2:with_underscore" };
Run run = RunFactory.getRun(deployment, RunType.Orchestration, user);
for (String name : validNames) {
new RuntimeParameter(run, name, "", "");
}
CommonTestUtil.deleteDeployment(deployment);
}
@Test
public void checkInvalidNames() throws ValidationException {
String[] invalidNames = { "", "a", ":", ":a", " :a", ".:a", "a.b:a",
"ssx:a", "a:b:c", "a:b.c", "a:1", "ss:", "orchestrator:",
"orchestrator--a:a", "machine:", "missing_key.1:",
"missing_key:", "name-with-dashes.1:a" };
for (String name : invalidNames) {
try {
new RuntimeParameter(null, name, "ok", "ok");
fail("invalid RuntimeParameter name did not throw an exception: " + name);
} catch (ValidationException e) {
// OK.
}
}
}
@Test
public void extractParameterParts() {
assertThat(RuntimeParameter.extractNodeNamePart("node:param"), is("node"));
assertNull(RuntimeParameter.extractNodeNamePart("something"));
assertThat(RuntimeParameter.extractParamNamePart("node:param"), is("param"));
assertNull(RuntimeParameter.extractParamNamePart("something"));
}
}