/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.activemq.artemis.tests.integration.cluster; import java.io.File; import org.apache.activemq.artemis.core.server.NodeManager; import org.apache.activemq.artemis.core.server.impl.FileLockNodeManager; public class NodeManagerAction { public static final int START_LIVE = 0; public static final int START_BACKUP = 1; public static final int CRASH_LIVE = 2; public static final int PAUSE_LIVE = 3; public static final int STOP_BACKUP = 4; public static final int AWAIT_LIVE = 5; public static final int RELEASE_BACKUP = 6; public static final int HAS_LIVE = 10; public static final int HAS_BACKUP = 11; public static final int DOESNT_HAVE_LIVE = 12; public static final int DOESNT_HAVE_BACKUP = 13; private final int[] work; boolean hasLiveLock = false; boolean hasBackupLock = false; public NodeManagerAction(int... work) { this.work = work; } public void performWork(NodeManager nodeManager) throws Exception { for (int action : work) { switch (action) { case START_LIVE: nodeManager.startLiveNode().activationComplete(); hasLiveLock = true; hasBackupLock = false; break; case START_BACKUP: nodeManager.startBackup(); hasBackupLock = true; break; case CRASH_LIVE: nodeManager.crashLiveServer(); hasLiveLock = false; break; case PAUSE_LIVE: nodeManager.pauseLiveServer(); hasLiveLock = false; break; case STOP_BACKUP: nodeManager.stopBackup(); hasBackupLock = false; break; case AWAIT_LIVE: nodeManager.awaitLiveNode(); hasLiveLock = true; break; case RELEASE_BACKUP: nodeManager.releaseBackup(); hasBackupLock = false; case HAS_LIVE: if (!hasLiveLock) { throw new IllegalStateException("live lock not held"); } break; case HAS_BACKUP: if (!hasBackupLock) { throw new IllegalStateException("backup lock not held"); } break; case DOESNT_HAVE_LIVE: if (hasLiveLock) { throw new IllegalStateException("live lock held"); } break; case DOESNT_HAVE_BACKUP: if (hasBackupLock) { throw new IllegalStateException("backup lock held"); } break; } } } public String[] getWork() { String[] strings = new String[work.length]; for (int i = 0, stringsLength = strings.length; i < stringsLength; i++) { strings[i] = "" + work[i]; } return strings; } public static void main(String[] args) throws Exception { int[] work1 = new int[args.length]; for (int i = 0; i < args.length; i++) { work1[i] = Integer.parseInt(args[i]); } NodeManagerAction nodeManagerAction = new NodeManagerAction(work1); FileLockNodeManager nodeManager = new FileLockNodeManager(new File("."), false); nodeManager.start(); try { nodeManagerAction.performWork(nodeManager); } catch (Exception e) { e.printStackTrace(); System.exit(9); } System.out.println("work performed"); } }