/*
* (C) Copyright 2010 Nuxeo SA (http://nuxeo.com/) and others.
*
* 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.
*
* Contributors:
* Nuxeo - initial API and implementation
*/
package org.nuxeo.ecm.core.management.test.statuses;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.util.List;
import javax.inject.Inject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.nuxeo.ecm.core.management.api.AdministrativeStatus;
import org.nuxeo.ecm.core.management.api.AdministrativeStatusManager;
import org.nuxeo.ecm.core.management.api.GlobalAdministrativeStatusManager;
import org.nuxeo.ecm.core.management.api.ProbeManager;
import org.nuxeo.ecm.core.management.statuses.AdministrableServiceDescriptor;
import org.nuxeo.ecm.core.management.storage.DocumentStoreSessionRunner;
import org.nuxeo.ecm.core.test.CoreFeature;
import org.nuxeo.ecm.core.test.annotations.Granularity;
import org.nuxeo.ecm.core.test.annotations.RepositoryConfig;
import org.nuxeo.runtime.api.Framework;
import org.nuxeo.runtime.test.runner.Deploy;
import org.nuxeo.runtime.test.runner.Features;
import org.nuxeo.runtime.test.runner.FeaturesRunner;
@RunWith(FeaturesRunner.class)
@Features(CoreFeature.class)
@RepositoryConfig(cleanup = Granularity.METHOD)
@Deploy({ "org.nuxeo.runtime.management", //
"org.nuxeo.ecm.core.management", //
"org.nuxeo.ecm.core.management.test" })
public class TestAdministrativeStatusService {
@Inject
protected CoreFeature coreFeature;
@Before
public void setUp() throws Exception {
DocumentStoreSessionRunner.setRepositoryName(coreFeature.getRepositoryName());
}
@After
public void tearDown() {
// clear for next test
AdministrativeStatusChangeListener.init();
RuntimeListener.init();
}
@Test
public void testServiceLookups() {
// local manager lookup
AdministrativeStatusManager localManager = Framework.getLocalService(AdministrativeStatusManager.class);
assertNotNull(localManager);
// global manager lookup
GlobalAdministrativeStatusManager globalManager = Framework.getLocalService(GlobalAdministrativeStatusManager.class);
assertNotNull(globalManager);
// ensure that local manager is a singleton
AdministrativeStatusManager localManager2 = globalManager.getStatusManager(globalManager.getLocalNuxeoInstanceIdentifier());
assertEquals(localManager, localManager2);
ProbeManager pm = Framework.getLocalService(ProbeManager.class);
assertNotNull(pm);
}
@Test
public void testInstanceStatus() {
AdministrativeStatusManager localManager = Framework.getLocalService(AdministrativeStatusManager.class);
AdministrativeStatus status = localManager.getNuxeoInstanceStatus();
assertTrue(status.isActive());
assertTrue(AdministrativeStatusChangeListener.isServerActivatedEventTriggered());
assertFalse(AdministrativeStatusChangeListener.isServerPassivatedEventTriggered());
assertTrue(RuntimeListener.isServerActivatedEventTriggered());
assertFalse(RuntimeListener.isServerPassivatedEventTriggered());
status = localManager.deactivateNuxeoInstance("Nuxeo Server is down for maintenance", "system");
assertTrue(status.isPassive());
assertTrue(AdministrativeStatusChangeListener.isServerPassivatedEventTriggered());
assertTrue(RuntimeListener.isServerPassivatedEventTriggered());
status = localManager.getNuxeoInstanceStatus();
assertTrue(status.isPassive());
}
@Test
public void testMiscStatusWithDefaultValue() {
final String serviceId = "org.nuxeo.ecm.administrator.message";
AdministrativeStatusManager localManager = Framework.getLocalService(AdministrativeStatusManager.class);
AdministrativeStatus status = localManager.getStatus(serviceId);
assertTrue(status.isPassive());
status = localManager.activate(serviceId, "Hi Nuxeo Users from Admin", "Administrator");
assertTrue(status.isActive());
status = localManager.deactivate(serviceId, "", "Administrator");
assertTrue(status.isPassive());
}
@Test
public void testNonExistingStatus() {
AdministrativeStatusManager localManager = Framework.getLocalService(AdministrativeStatusManager.class);
AdministrativeStatus nonExistingStatus = localManager.getStatus("org.nawak");
assertNull(nonExistingStatus);
}
@Test
public void testServiceListing() {
AdministrativeStatusManager localManager = Framework.getLocalService(AdministrativeStatusManager.class);
List<AdministrativeStatus> statuses = localManager.getAllStatuses();
assertNotNull(statuses);
assertEquals(3, statuses.size());
}
@Test
public void testGlobalManager() {
final String serviceId = "org.nuxeo.ecm.administrator.message";
GlobalAdministrativeStatusManager globalManager = Framework.getLocalService(GlobalAdministrativeStatusManager.class);
assertNotNull(globalManager);
// check that we only have on Nuxeo instance for now
List<String> instances = globalManager.listInstanceIds();
assertNotNull(instances);
assertEquals(1, instances.size());
// check that we have 3 declared services
List<AdministrableServiceDescriptor> descs = globalManager.listRegistredServices();
assertNotNull(descs);
assertEquals(3, descs.size());
// for creation of a second instance
AdministrativeStatusManager sm = globalManager.getStatusManager("MyClusterNode2");
assertNotNull(sm);
AdministrativeStatus status = sm.deactivateNuxeoInstance("ClusterNode2 is deactivated for now", "system");
assertNotNull(status);
// check that we now have 2 instances
instances = globalManager.listInstanceIds();
assertEquals(2, instances.size());
// update status on the same service on both nodes
globalManager.setStatus(serviceId, AdministrativeStatus.ACTIVE, "Yo Man", "system");
AdministrativeStatus statusNode1 = globalManager.getStatusManager(
globalManager.getLocalNuxeoInstanceIdentifier()).getStatus(serviceId);
assertNotNull(statusNode1);
assertEquals("Yo Man", statusNode1.getMessage());
AdministrativeStatus statusNode2 = sm.getStatus(serviceId);
assertNotNull(statusNode2);
assertEquals("Yo Man", statusNode2.getMessage());
}
}