1*ef39d40dSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*ef39d40dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*ef39d40dSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*ef39d40dSAndrew Rist * distributed with this work for additional information 6*ef39d40dSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*ef39d40dSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*ef39d40dSAndrew Rist * "License"); you may not use this file except in compliance 9*ef39d40dSAndrew Rist * with the License. You may obtain a copy of the License at 10*ef39d40dSAndrew Rist * 11*ef39d40dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*ef39d40dSAndrew Rist * 13*ef39d40dSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*ef39d40dSAndrew Rist * software distributed under the License is distributed on an 15*ef39d40dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*ef39d40dSAndrew Rist * KIND, either express or implied. See the License for the 17*ef39d40dSAndrew Rist * specific language governing permissions and limitations 18*ef39d40dSAndrew Rist * under the License. 19*ef39d40dSAndrew Rist * 20*ef39d40dSAndrew Rist *************************************************************/ 21*ef39d40dSAndrew Rist 22*ef39d40dSAndrew Rist 23cdf0e10cSrcweir package helper; 24cdf0e10cSrcweir 25cdf0e10cSrcweir import lib.TestParameters; 26cdf0e10cSrcweir import java.util.StringTokenizer; 27cdf0e10cSrcweir import util.utils; 28cdf0e10cSrcweir 29cdf0e10cSrcweir public class OfficeWatcher extends Thread implements share.Watcher { 30cdf0e10cSrcweir 31cdf0e10cSrcweir public boolean finish; 32cdf0e10cSrcweir private TestParameters params; 33cdf0e10cSrcweir private int StoredPing = 0; 34cdf0e10cSrcweir private boolean debug = false; 35cdf0e10cSrcweir 36cdf0e10cSrcweir /** Creates new OfficeWatcher 37cdf0e10cSrcweir * @param param 38cdf0e10cSrcweir */ OfficeWatcher(TestParameters param)39cdf0e10cSrcweir public OfficeWatcher(TestParameters param) { 40cdf0e10cSrcweir finish = false; 41cdf0e10cSrcweir this.params = param; 42cdf0e10cSrcweir debug = params.getBool(util.PropertyName.DEBUG_IS_ACTIVE); 43cdf0e10cSrcweir } 44cdf0e10cSrcweir 45cdf0e10cSrcweir /** 46cdf0e10cSrcweir * pings the office watcher to check for changes 47cdf0e10cSrcweir */ ping()48cdf0e10cSrcweir public void ping() { 49cdf0e10cSrcweir try { 50cdf0e10cSrcweir StoredPing++; 51cdf0e10cSrcweir } catch (Exception e) { 52cdf0e10cSrcweir StoredPing = 0; 53cdf0e10cSrcweir } 54cdf0e10cSrcweir } 55cdf0e10cSrcweir 56cdf0e10cSrcweir /** 57cdf0e10cSrcweir * returns the amount of pings 58cdf0e10cSrcweir * @return returns the amount of pings 59cdf0e10cSrcweir */ getPing()60cdf0e10cSrcweir public int getPing() { 61cdf0e10cSrcweir return StoredPing; 62cdf0e10cSrcweir } 63cdf0e10cSrcweir run()64cdf0e10cSrcweir public void run() { 65cdf0e10cSrcweir dbg("started"); 66cdf0e10cSrcweir boolean isDone = false; 67cdf0e10cSrcweir final ProcessHandler ph = (ProcessHandler) params.get("AppProvider"); 68cdf0e10cSrcweir int timeOut = params.getInt("TimeOut"); 69cdf0e10cSrcweir if (ph == null) { 70cdf0e10cSrcweir isDone = true; 71cdf0e10cSrcweir } 72cdf0e10cSrcweir while (!isDone) { 73cdf0e10cSrcweir timeOut = params.getInt("TimeOut"); 74cdf0e10cSrcweir final int previous = StoredPing; 75cdf0e10cSrcweir shortWait(timeOut == 0 ? 30000 : timeOut); 76cdf0e10cSrcweir // a timeout with value 0 lets watcher not react. 77cdf0e10cSrcweir if ((StoredPing == previous) && timeOut != 0) { 78cdf0e10cSrcweir isDone = true; 79cdf0e10cSrcweir } 80cdf0e10cSrcweir // execute in case the watcher is not needed anymore 81cdf0e10cSrcweir if (finish) { 82cdf0e10cSrcweir return; 83cdf0e10cSrcweir } 84cdf0e10cSrcweir } 85cdf0e10cSrcweir if (ph != null) { 86cdf0e10cSrcweir dbg("the Office is idle for " + timeOut / 1000 + 87cdf0e10cSrcweir " seconds, it probably hangs and is killed NOW."); 88cdf0e10cSrcweir final String AppKillCommand = (String) params.get(util.PropertyName.APP_KILL_COMMAND); 89cdf0e10cSrcweir if (AppKillCommand != null) { 90cdf0e10cSrcweir final StringTokenizer aKillCommandToken = new StringTokenizer(AppKillCommand, ";"); 91cdf0e10cSrcweir while (aKillCommandToken.hasMoreTokens()) { 92cdf0e10cSrcweir final String sKillCommand = aKillCommandToken.nextToken(); 93cdf0e10cSrcweir 94cdf0e10cSrcweir dbg("User defined an application to destroy the started process."); 95cdf0e10cSrcweir dbg("Trying to execute: " + sKillCommand); 96cdf0e10cSrcweir 97cdf0e10cSrcweir final ProcessHandler pHdl = new ProcessHandler(sKillCommand); 98cdf0e10cSrcweir pHdl.executeSynchronously(); 99cdf0e10cSrcweir // dbg("---> Output of killoffice:"); 100cdf0e10cSrcweir // dbg(pHdl.getOutputText()); 101cdf0e10cSrcweir // dbg("<--- Output of killoffice"); 102cdf0e10cSrcweir // dbg("---> Error output of killoffice:"); 103cdf0e10cSrcweir // dbg(pHdl.getErrorText()); 104cdf0e10cSrcweir // dbg("<--- Error output of killoffice"); 105cdf0e10cSrcweir 106cdf0e10cSrcweir } 107cdf0e10cSrcweir } 108cdf0e10cSrcweir ph.kill(); 109cdf0e10cSrcweir } else { 110cdf0e10cSrcweir dbg("reaeched timeout but ProcessHandler is NULL"); 111cdf0e10cSrcweir } 112cdf0e10cSrcweir shortWait(timeOut == 0 ? 30000 : timeOut); 113cdf0e10cSrcweir dbg("finished"); 114cdf0e10cSrcweir } 115cdf0e10cSrcweir shortWait(int timeOut)116cdf0e10cSrcweir protected void shortWait(int timeOut) { 117cdf0e10cSrcweir try { 118cdf0e10cSrcweir OfficeWatcher.sleep(timeOut); 119cdf0e10cSrcweir } catch (java.lang.InterruptedException ie) { 120cdf0e10cSrcweir } 121cdf0e10cSrcweir } 122cdf0e10cSrcweir dbg(String message)123cdf0e10cSrcweir protected void dbg(String message) { 124cdf0e10cSrcweir if (debug) { 125cdf0e10cSrcweir System.out.println(utils.getDateTime() + "OfficeWatcher: " + message); 126cdf0e10cSrcweir } 127cdf0e10cSrcweir } 128cdf0e10cSrcweir } 129