예제 #1
0
        protected override async Task <ExitCode> InvokeInternal(ILogger logger)
        {
            var processManager  = new ProcessManager(_arguments.XcodeRoot, _arguments.MlaunchPath);
            var deviceLoader    = new HardwareDeviceLoader(processManager);
            var simulatorLoader = new SimulatorLoader(processManager);

            var logs = new Logs(_arguments.OutputDirectory);

            var cts = new CancellationTokenSource();

            cts.CancelAfter(_arguments.Timeout);

            var exitCode = ExitCode.SUCCESS;

            foreach (TestTarget target in _arguments.TestTargets)
            {
                var tunnelBore = (_arguments.CommunicationChannel == CommunicationChannel.UsbTunnel && !target.IsSimulator())
                    ? new TunnelBore(processManager)
                    : null;
                var exitCodeForRun = await RunTest(logger, target, logs, processManager, deviceLoader, simulatorLoader,
                                                   tunnelBore, cts.Token);

                if (exitCodeForRun != ExitCode.SUCCESS)
                {
                    exitCode = exitCodeForRun;
                }
            }

            return(exitCode);
        }
예제 #2
0
 public void SetUp()
 {
     mlaunchPath    = "/usr/bin/mlaunch";          // any will be ok, is mocked
     sdkPath        = "/Applications/Xcode.app";
     executionLog   = new Mock <ILog> ();
     processManager = new Mock <IProcessManager> ();
     simulators     = new SimulatorLoader(processManager.Object);
 }
예제 #3
0
        protected override async Task <ExitCode> InvokeInternal()
        {
            var processManager  = new ProcessManager(_arguments.XcodeRoot, _arguments.MlaunchPath);
            var deviceLoader    = new HardwareDeviceLoader(processManager);
            var simulatorLoader = new SimulatorLoader(processManager);

            var logs = new Logs(_arguments.OutputDirectory);
            var cancellationToken = new CancellationToken(); // TODO: Get cancellation from command line env? Set timeout through it?

            var exitCode = ExitCode.SUCCESS;

            foreach (TestTarget target in _arguments.TestTargets)
            {
                var exitCodeForRun = await RunTest(target, logs, processManager, deviceLoader, simulatorLoader, cancellationToken);

                if (exitCodeForRun != ExitCode.SUCCESS)
                {
                    exitCode = exitCodeForRun;
                }
            }

            return(exitCode);
        }
예제 #4
0
 public void TearDown()
 {
     executionLog   = null;
     processManager = null;
     simulators     = null;
 }
예제 #5
0
        protected override async Task <ExitCode> InvokeInternal(ILogger logger)
        {
            var processManager  = new ProcessManager(mlaunchPath: _arguments.MlaunchPath);
            var deviceLoader    = new HardwareDeviceLoader(processManager);
            var simulatorLoader = new SimulatorLoader(processManager);
            var log             = new MemoryLog(); // do we really want to log this?

            var mlaunchLog = new MemoryLog {
                Timestamp = false
            };

            ProcessExecutionResult result;

            try
            {
                result = await processManager.ExecuteCommandAsync(new MlaunchArguments(new MlaunchVersionArgument()), new MemoryLog(), mlaunchLog, new MemoryLog(), TimeSpan.FromSeconds(10));
            }
            catch (Exception e)
            {
                logger.LogError($"Failed to get mlaunch version info:{Environment.NewLine}{e}");
                return(ExitCode.GENERAL_FAILURE);
            }

            if (!result.Succeeded)
            {
                logger.LogError($"Failed to get mlaunch version info:{Environment.NewLine}{mlaunchLog}");
                return(ExitCode.GENERAL_FAILURE);
            }

            // build the required data, then depending on the format print out
            var info = new SystemInfo(
                machineName: Environment.MachineName,
                oSName: "Mac OS X",
                oSVersion: Darwin.GetVersion() ?? "",
                oSPlatform: "Darwin",
                xcodePath: processManager.XcodeRoot,
                xcodeVersion: processManager.XcodeVersion.ToString(),
                mlaunchPath: processManager.MlaunchPath,
                mlaunchVersion: mlaunchLog.ToString().Trim());

            try
            {
                await simulatorLoader.LoadDevices(log);
            }
            catch (Exception e)
            {
                logger.LogError($"Failed to load simulators:{Environment.NewLine}{e}");
                logger.LogInformation($"Execution log:{Environment.NewLine}{log}");
                return(ExitCode.GENERAL_FAILURE);
            }

            foreach (var sim in simulatorLoader.AvailableDevices)
            {
                info.Simulators.Add(new DeviceInfo(
                                        name: sim.Name,
                                        uDID: sim.UDID,
                                        type: sim.SimDeviceType.Remove(0, SimulatorPrefix.Length).Replace('-', ' '),
                                        oSVersion: sim.OSVersion));
            }

            try
            {
                await deviceLoader.LoadDevices(log);
            }
            catch (Exception e)
            {
                logger.LogError($"Failed to load connected devices:{Environment.NewLine}{e}");
                logger.LogInformation($"Execution log:{Environment.NewLine}{log}");
                return(ExitCode.GENERAL_FAILURE);
            }

            foreach (var dev in deviceLoader.ConnectedDevices)
            {
                info.Devices.Add(new DeviceInfo(
                                     name: dev.Name,
                                     uDID: dev.DeviceIdentifier,
                                     type: $"{dev.DeviceClass} {dev.DevicePlatform}",
                                     oSVersion: dev.OSVersion));
            }

            if (_arguments.UseJson)
            {
                await AsJson(info);
            }
            else
            {
                AsText(info);
            }

            return(ExitCode.SUCCESS);
        }
예제 #6
0
 public SimulatorsTest()
 {
     _executionLog   = new Mock <ILog>();
     _processManager = new Mock <IMLaunchProcessManager>();
     _simulators     = new SimulatorLoader(_processManager.Object);
 }