/*
* Copyright 2014 SeaClouds
* Contact: SeaClouds
*
* 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 eu.seaclouds.policy;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.policy.PolicySpec;
import org.apache.brooklyn.core.entity.trait.Startable;
import org.apache.brooklyn.entity.software.base.EmptySoftwareProcess;
import org.apache.brooklyn.test.Asserts;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
public class SeaCloudsManagementPolicyLiveTest extends AbstractSeaCloudsPoliciesLiveTests {
private static final Logger log = LoggerFactory.getLogger(SeaCloudsManagementPolicyLiveTest.class);
private static final String BASE64_AGREEMENT = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KPHdzYWc6QWdyZWVtZW50IHhtbG5zOnNsYT0iaHR0cDovL3NsYS5hdG9zLmV1IiB4bWxuczp3c2FnPSJodHRwOi8vd3d3LmdnZi5vcmcvbmFtZXNwYWNlcy93cy1hZ3JlZW1lbnQiIHdzYWc6QWdyZWVtZW50SWQ9ImFwcGlkIj4NCiAgICA8d3NhZzpOYW1lPnVzZXItc2VhY2xvdWRzLUNoYXQgQXBwbGljYXRpb24gdXNpbmcgSkJvc3M8L3dzYWc6TmFtZT4NCiAgICA8d3NhZzpDb250ZXh0Pg0KICAgICAgICA8d3NhZzpBZ3JlZW1lbnRJbml0aWF0b3I+dXNlcjwvd3NhZzpBZ3JlZW1lbnRJbml0aWF0b3I+DQogICAgICAgIDx3c2FnOkFncmVlbWVudFJlc3BvbmRlcj5zZWFjbG91ZHM8L3dzYWc6QWdyZWVtZW50UmVzcG9uZGVyPg0KICAgICAgICA8d3NhZzpTZXJ2aWNlUHJvdmlkZXI+QWdyZWVtZW50UmVzcG9uZGVyPC93c2FnOlNlcnZpY2VQcm92aWRlcj4NCiAgICAgICAgPHdzYWc6RXhwaXJhdGlvblRpbWU+MjAxNy0wMi0wOFQxNjo0MToyOSswMDAwPC93c2FnOkV4cGlyYXRpb25UaW1lPg0KICAgICAgICA8c2xhOlNlcnZpY2U+Q2hhdCBBcHBsaWNhdGlvbiB1c2luZyBKQm9zczwvc2xhOlNlcnZpY2U+DQogICAgPC93c2FnOkNvbnRleHQ+DQogICAgPHdzYWc6VGVybXM+DQogICAgICAgIDx3c2FnOkFsbD4NCiAgICAgICAgICAgIDx3c2FnOlNlcnZpY2VEZXNjcmlwdGlvblRlcm0vPg0KICAgICAgICAgICAgPHdzYWc6R3VhcmFudGVlVGVybSB3c2FnOk5hbWU9ImFwcGlkX215c3FsX3NlcnZlcl9jcHVfdXRpbGl6YXRpb24iPg0KICAgICAgICAgICAgICAgIDx3c2FnOlNlcnZpY2VTY29wZSB3c2FnOlNlcnZpY2VOYW1lPSJzZXJ2aWNlIj5hcHBpZF9teXNxbF9zZXJ2ZXI8L3dzYWc6U2VydmljZVNjb3BlPg0KICAgICAgICAgICAgICAgIDx3c2FnOlNlcnZpY2VMZXZlbE9iamVjdGl2ZT4NCiAgICAgICAgICAgICAgICAgICAgPHdzYWc6S1BJVGFyZ2V0Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPHdzYWc6S1BJTmFtZT5hcHBpZF9teXNxbF9zZXJ2ZXIvQ1BVVXRpbGl6YXRpb248L3dzYWc6S1BJTmFtZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx3c2FnOkN1c3RvbVNlcnZpY2VMZXZlbD57ImNvbnN0cmFpbnQiOiAiYXBwaWRfbXlzcWxfc2VydmVyX2NwdV91dGlsaXphdGlvbiBOT1RfRVhJU1RTIiwgInFvcyI6ICJNRVRSSUMgTEUgMC41IiB9PC93c2FnOkN1c3RvbVNlcnZpY2VMZXZlbD4NCiAgICAgICAgICAgICAgICAgICAgPC93c2FnOktQSVRhcmdldD4NCiAgICAgICAgICAgICAgICA8L3dzYWc6U2VydmljZUxldmVsT2JqZWN0aXZlPg0KICAgICAgICAgICAgPC93c2FnOkd1YXJhbnRlZVRlcm0+DQogICAgICAgIDwvd3NhZzpBbGw+DQogICAgPC93c2FnOlRlcm1zPg0KPC93c2FnOkFncmVlbWVudD4NCg==";
private static final String BASE64_RULES = "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KPG1vbml0b3JpbmdSdWxlcyB4bWxucz0iaHR0cDovL3d3dy5tb2RhY2xvdWRzLmV1L3hzZC8xLjAvbW9uaXRvcmluZ19ydWxlc19zY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5tb2RhY2xvdWRzLmV1L3hzZC8xLjAvbW9uaXRvcmluZ19ydWxlc19zY2hlbWEiPg0KICAgIDwhLS0gTW9uaXRvcmluZyBydWxlIGlkIHBhdHRlcm4gYXBwaWRfdG9zY2Fsb2NhdGlvbm5hbWVfbWV0cmljIC0tPg0KICAgIDxtb25pdG9yaW5nUnVsZSBpZD0iYXBwaWRfbXlzcWxfc2VydmVyX2NwdV91dGlsaXphdGlvbiIgdGltZVN0ZXA9IjEwIiB0aW1lV2luZG93PSIxMCI+DQogICAgICAgIDxtb25pdG9yZWRUYXJnZXRzPg0KICAgICAgICAgICAgPG1vbml0b3JlZFRhcmdldCB0eXBlPSJhcHBpZF9teXNxbF9zZXJ2ZXIiIGNsYXNzPSJWTSIvPg0KICAgICAgICA8L21vbml0b3JlZFRhcmdldHM+DQogICAgICAgIDxjb2xsZWN0ZWRNZXRyaWMgbWV0cmljTmFtZT0iQ1BVVXRpbGl6YXRpb24iPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJzYW1wbGluZ1RpbWUiPjEwPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InNhbXBsaW5nUHJvYmFiaWxpdHkiPjE8L3BhcmFtZXRlcj4NCiAgICAgICAgPC9jb2xsZWN0ZWRNZXRyaWM+DQogICAgICAgIDxhY3Rpb25zPg0KICAgICAgICAgICAgPCEtLSBPdXRwdXRtZXRyaWMgcGF0dGVybiBhcHBpZF90b3NjYWxvY2F0aW9ubmFtZV9tZXRyaWNuYW1lX21ldHJpYyAtLT4NCiAgICAgICAgICAgIDxhY3Rpb24gbmFtZT0iT3V0cHV0TWV0cmljIj4NCiAgICAgICAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9Im1ldHJpYyI+YXBwaWRfbXlzcWxfc2VydmVyX2NwdV91dGlsaXphdGlvbl9tZXRyaWM8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbHVlIj5NRVRSSUM8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InJlc291cmNlSWQiPklEPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8L2FjdGlvbj4NCiAgICAgICAgPC9hY3Rpb25zPg0KICAgIDwvbW9uaXRvcmluZ1J1bGU+DQogICAgPG1vbml0b3JpbmdSdWxlIGlkPSJhcHBpZF9teXNxbF9zZXJ2ZXJfcmFtX3V0aWxpemF0aW9uIiB0aW1lU3RlcD0iMTAiIHRpbWVXaW5kb3c9IjEwIj4NCiAgICAgICAgPG1vbml0b3JlZFRhcmdldHM+DQogICAgICAgICAgICA8bW9uaXRvcmVkVGFyZ2V0IHR5cGU9ImFwcGlkX215c3FsX3NlcnZlciIgY2xhc3M9IlZNIi8+DQogICAgICAgIDwvbW9uaXRvcmVkVGFyZ2V0cz4NCiAgICAgICAgPGNvbGxlY3RlZE1ldHJpYyBtZXRyaWNOYW1lPSJNZW1Vc2VkIj4NCiAgICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0ic2FtcGxpbmdUaW1lIj4xMDwvcGFyYW1ldGVyPg0KICAgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJzYW1wbGluZ1Byb2JhYmlsaXR5Ij4xPC9wYXJhbWV0ZXI+DQogICAgICAgIDwvY29sbGVjdGVkTWV0cmljPg0KICAgICAgICA8YWN0aW9ucz4NCiAgICAgICAgICAgIDxhY3Rpb24gbmFtZT0iT3V0cHV0TWV0cmljIj4NCiAgICAgICAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9Im1ldHJpYyI+YXBwaWRfbXlzcWxfc2VydmVyX3JhbV91dGlsaXphdGlvbl9tZXRyaWM8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InZhbHVlIj5NRVRSSUM8L3BhcmFtZXRlcj4NCiAgICAgICAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9InJlc291cmNlSWQiPklEPC9wYXJhbWV0ZXI+DQogICAgICAgICAgICA8L2FjdGlvbj4NCiAgICAgICAgPC9hY3Rpb25zPg0KICAgIDwvbW9uaXRvcmluZ1J1bGU+DQo8L21vbml0b3JpbmdSdWxlcz4NCg==";
@Test(expectedExceptions = Exception.class)
public void testAttachPolicyToEntity() {
EmptySoftwareProcess entity = app.createAndManageChild(EntitySpec.create(EmptySoftwareProcess.class));
entity.policies().add(PolicySpec.create(SeaCloudsManagementPolicy.class));
app.start(ImmutableList.of(loc));
}
//TODO: use mock here
@Test(groups = {"Live"}, enabled = false)
public void testAttachPolicyToApplication() {
app.createAndManageChild(EntitySpec.create(EmptySoftwareProcess.class));
app.policies().add(getPolicySpec());
app.start(ImmutableList.of(loc));
assertTrue(Iterables.getOnlyElement(app.policies()) instanceof SeaCloudsManagementPolicy);
Asserts.succeedsEventually(new Runnable() {
public void run() {
assertTrue(app.getAttribute(Startable.SERVICE_UP));
assertNotNull(app.getAttribute(SeaCloudsManagementPolicy.SLA_ID));
assertNotNull(app.getAttribute(SeaCloudsManagementPolicy.T4C_IDS));
assertFalse(app.getAttribute(SeaCloudsManagementPolicy.T4C_IDS).isEmpty());
}
});
}
protected PolicySpec<SeaCloudsManagementPolicy> getPolicySpec() {
return PolicySpec.create(SeaCloudsManagementPolicy.class)
.configure(SeaCloudsManagementPolicy.SLA_ENDPOINT, SLA_ENDPOINT)
.configure(SeaCloudsManagementPolicy.SLA_AGREEMENT, getBase64Agreement())
.configure(SeaCloudsManagementPolicy.T4C_ENDPOINT, T4C_ENDPOINT)
.configure(SeaCloudsManagementPolicy.T4C_RULES, getBase64Rules())
.configure(SeaCloudsManagementPolicy.INFLUXDB_ENDPOINT, INFLUXDB_ENDPOINT)
.configure(SeaCloudsManagementPolicy.INFLUXDB_DATABASE, INFLUXDB_DATABASE)
.configure(SeaCloudsManagementPolicy.INFLUXDB_USERNAME, INFLUXDB_USERNAME)
.configure(SeaCloudsManagementPolicy.INFLUXDB_PASSWORD, INFLUXDB_PASSWORD)
.configure(SeaCloudsManagementPolicy.GRAFANA_ENDPOINT, GRAFANA_ENDPOINT)
.configure(SeaCloudsManagementPolicy.GRAFANA_USERNAME, GRAFANA_USERNAME)
.configure(SeaCloudsManagementPolicy.GRAFANA_PASSWORD, GRAFANA_PASSWORD);
}
public String getBase64Agreement() {
return BASE64_AGREEMENT;
}
public String getBase64Rules() {
return BASE64_RULES;
}
}