public void testFactoryFailsForUnknownType()
        {
            AppDef   appDef   = new AppDef();
            AppState appState = new AppState();

            var f = new AppInitializedDetectorFactory();

            var d = f.create(appDef, appState, 0, XElement.Parse("<unknown>any-params</unknown>"));
        }
        public void testFactoryFailsForUnknownType()
        {
            AppDef appDef = new AppDef();
            AppState appState = new AppState();

            var f = new AppInitializedDetectorFactory();

            var d = f.create( appDef, appState, 0, XElement.Parse("<unknown>any-params</unknown>") );
        }
        public void testFactoryCreatesTimeOut()
        {
            AppDef   appDef   = new AppDef();
            AppState appState = new AppState();

            var f = new AppInitializedDetectorFactory();

            IAppInitializedDetector d = f.create(appDef, appState, 0, XElement.Parse("<timeout> 0.1</timeout>"));

            Assert.AreEqual(typeof(TimeOutInitDetector), d.GetType(), "correct detector type created");
        }
        public void testFactoryCreatesTimeOut()
        {
            AppDef appDef = new AppDef();
            AppState appState = new AppState();

            var f = new AppInitializedDetectorFactory();

            IAppInitializedDetector d = f.create( appDef, appState, 0, XElement.Parse("<timeout> 0.1</timeout>") );

            Assert.AreEqual(typeof(TimeOutInitDetector), d.GetType(), "correct detector type created");
        }
Example #5
0
 public Agent(
     string machineId,
     IClient client,
     bool fallbackToLocalOnDisconnection
 )
 {
     LauncherFactory launcherFactory = new LauncherFactory();
     AppInitializedDetectorFactory appInitializedDetectorFactory = new AppInitializedDetectorFactory();
     this.localOps = new LocalOperations(machineId, launcherFactory, appInitializedDetectorFactory);
     this.netOps = new NetworkProxy( machineId, client, localOps );
     this.proxy = new DirigentControlSwitchableProxy(selectProxyImpl(client.IsConnected()));
     this.client = client;
     this.fallbackToLocalOnDisconnection = fallbackToLocalOnDisconnection;
 }
Example #6
0
        public Agent(
            string machineId,
            IClient client,
            bool fallbackToLocalOnDisconnection,
            string rootForRelativePaths
            )
        {
            LauncherFactory launcherFactory = new LauncherFactory();
            AppInitializedDetectorFactory appInitializedDetectorFactory = new AppInitializedDetectorFactory();

            this.localOps = new LocalOperations(machineId, launcherFactory, appInitializedDetectorFactory, rootForRelativePaths);
            this.netOps   = new NetworkProxy(machineId, client, localOps);
            this.proxy    = new DirigentControlSwitchableProxy(selectProxyImpl(client.IsConnected()));
            this.client   = client;
            this.fallbackToLocalOnDisconnection = fallbackToLocalOnDisconnection;
        }
        /// <summary>
        /// Launches a local app if not already running.
        /// </summary>
        /// <param name="appIdTuple"></param>
        public void  LaunchApp(AppIdTuple appIdTuple)
        {
            if (!(localApps.ContainsKey(appIdTuple)))
            {
                throw new NotALocalApp(appIdTuple, machineId);
            }

            var la       = localApps[appIdTuple];
            var appState = appsState[la.AppDef.AppIdTuple];

            // don't do anything if the app is already running
            if (la.launcher != null && la.launcher.Running)
            {
                return;
            }

            log.DebugFormat("Launching app {0}", la.AppDef.AppIdTuple);


            // launch the application
            appState.Started     = false;
            appState.StartFailed = false;
            appState.Killed      = false;

            la.watchers.Clear();

            la.launcher = launcherFactory.createLauncher(la.AppDef, rootForRelativePaths);

            try
            {
                la.launcher.Launch();
                appState.Started     = true;
                appState.Initialized = true; // a watcher can set it to false upon its creation if it works like an AppInitDetector

                //// instantiate app watchers
                //foreach( var watcherDef in la.AppDef.Watchers )
                //{
                //    var w = appWatcherFactory.create( la.AppDef, appsState[appIdTuple], la.launcher.ProcessId, watcherDef);
                //    la.watchers.Add( w );
                //}

                // instantiate init detector (also a watcher)
                {
                    // compatibility with InitialCondition="timeout 2.0" ... convert to XML definition <timeout>2.0</timeout>
                    {
                        if (!string.IsNullOrEmpty(la.AppDef.InitializedCondition))
                        {
                            string name;
                            string args;
                            AppInitializedDetectorFactory.ParseDefinitionString(la.AppDef.InitializedCondition, out name, out args);
                            string xmlString = string.Format("<{0}>{1}</{0}>", name, args);

                            var aid = appAppInitializedDetectorFactory.create(la.AppDef, appsState[appIdTuple], la.launcher.ProcessId, XElement.Parse(xmlString));
                            log.DebugFormat("Adding InitDetector {0}, pid {1}", aid.GetType().Name, la.launcher.ProcessId);
                            la.watchers.Add(aid);
                        }
                    }

                    foreach (var xml in la.AppDef.InitDetectors)
                    {
                        var aid = appAppInitializedDetectorFactory.create(la.AppDef, appsState[appIdTuple], la.launcher.ProcessId, XElement.Parse(xml));

                        log.DebugFormat("Adding InitDetector {0}, pid {1}", aid.GetType().Name, la.launcher.ProcessId);
                        la.watchers.Add(aid);
                    }
                }

                // instantiate window positioners
                foreach (var xml in la.AppDef.WindowPosXml)
                {
                    log.DebugFormat("Adding WindowsPositioner, pid {0}", la.launcher.ProcessId);
                    var wpo = new WindowPositioner(la.AppDef, appsState[appIdTuple], la.launcher.ProcessId, XElement.Parse(xml));
                    la.watchers.Add(wpo);
                }

                // instantiate autorestarter
                if (la.AppDef.RestartOnCrash)
                {
                    log.DebugFormat("Adding AutoRestarter, pid {0}", la.launcher.ProcessId);
                    var ar = new AutoRestarter(la.AppDef, appsState[appIdTuple], la.launcher.ProcessId, new XElement("Autorestart"));
                    la.watchers.Add(ar);
                }
            }
            catch (Exception ex)  // app launching failed
            {
                log.ErrorFormat("Exception: App \"{0}\"start failure {1}", la.AppDef.AppIdTuple, ex);

                appState.StartFailed = true;
                throw;
            }
        }