Java tutorial
/* * Copyright (c) 2014 Spotify AB. * * 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.spotify.helios.system; import com.spotify.helios.ZooKeeperTestManager; import com.spotify.helios.ZooKeeperTestingServerManager; import com.spotify.helios.agent.AgentMain; import com.google.common.util.concurrent.Service; import net.sourceforge.argparse4j.inf.ArgumentParserException; import org.apache.commons.io.FileUtils; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.nio.file.Files; import java.nio.file.Path; public class AgentStateDirConflictTest { @Rule public ExpectedException exception = ExpectedException.none(); private Thread.UncaughtExceptionHandler dueh; private Path stateDir; private AgentMain first; private AgentMain second; private ZooKeeperTestManager zk; @Before public void setup() throws Exception { zk = new ZooKeeperTestingServerManager(); dueh = Thread.getDefaultUncaughtExceptionHandler(); Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(final Thread t, final Throwable e) { } }); stateDir = Files.createTempDirectory("helios-agent-conflict-test"); first = makeAgent("first"); second = makeAgent("second"); } private AgentMain makeAgent(String name) throws ArgumentParserException { return new AgentMain("-vvvv", "--no-log-setup", "--no-http", "--name=" + name, "--zk=" + zk.connectString(), "--state-dir", stateDir.toString(), "--domain", ""); } @After public void teardown() throws Exception { FileUtils.deleteQuietly(stateDir.toFile()); stopQuietly(first); stopQuietly(second); Thread.setDefaultUncaughtExceptionHandler(dueh); zk.stop(); } private void stopQuietly(final Service service) { if (service == null) { return; } try { service.stopAsync().awaitTerminated(); } catch (Exception ignore) { } } @Test public void test() throws Exception { first.startAsync().awaitRunning(); exception.expect(IllegalStateException.class); second.startAsync().awaitRunning(); } }