private void ProcessCommand(Command command) { var removeMessageFromXenStore = true; try { var executableResult = _factory.CreateCommand(command.name).Execute(command.value); _store.Write(command.key, new Json<object>().Serialize(new { returncode = executableResult.ExitCode, message = executableResult.Output.Value() })); } catch (InvalidCommandException exception) { _store.Write(command.key, new Json<object>().Serialize(new { returncode = "1", message = exception.Message })); } catch (UnsuccessfulCommandExecutionException exception) { var result = (ExecutableResult) exception.Data["result"]; var output = ""; var error = ""; if (result.Output != null && !string.IsNullOrEmpty(result.Output.Value())) output = ", Output:" + result.Output.Value(); if (result.Error != null && !string.IsNullOrEmpty(result.Error.Value())) error = ", Error:" + result.Error.Value(); _store.Write(command.key, new Json<object>().Serialize(new { returncode = result.ExitCode, message = exception.Message + output + error })); } catch(Exception ex) { removeMessageFromXenStore = false; _logger.Log(String.Format("Exception was : {0}\nStackTrace Was: {1}", ex.Message, ex.StackTrace)); } finally { if (removeMessageFromXenStore) _store.Remove(command.key); } }
public void Setup() { CreateContext(); command = new Command { key = "key1", name = "12345", value = "Valuewrong" }; XenSetup(command); executableCommand.Stub(x => x.Execute(Arg<string>.Is.Anything)).Return(new ExecutableResult { ExitCode = "0", Error = new List<string>() }); commandFactory.Stub(x => x.CreateCommand(Arg<string>.Is.Anything)).Return(executableCommand); commandQueue.Work(); }
public ExecutableResult Execute(IExecutableCommand commandExecutable, Command command) { runInSafeBlock(SvcConfiguration.PreHookPath(command.name)); var result = commandExecutable.Execute(command.value); if (result.ExitCode == "0") { runInSafeBlock(SvcConfiguration.PostHookPath(command.name)); } else { _logger.Log(string.Format("Bypassing post command hook, received an exit code of {0} from the command {1}", result.ExitCode, command.name)); } return result; }
public void should_serialize_partially_filled_object_to_json() { var command = new Command {name = "password", value = "somepassword"}; Assert.AreEqual(_fullJsonStringWithObjectPartiallyPopulated, _jsonCommand.Serialize(command)); }
public void Setup() { CreateContext(); xenStore.GetMockRepository().Ordered(); xendata = new Command { key = "key1", name = "BadCommand", value = "Valuewrong" }; XenSetup(xendata); commandFactory.Stub(x => x.CreateCommand(Arg<string>.Is.Anything)).Throw(new InvalidCommandException("BadCommand")); }
public void Setup() { CreateContext(); firstcommand = new Command { key = "key1", name = "Command1", value = "12345" }; secondcommand = new Command { key = "key2", name = "Command2", value = "23456" }; XenSetup(firstcommand, secondcommand); executableCommand.Stub(x => x.Execute(Arg<string>.Is.Anything)).Return(new ExecutableResult { ExitCode = "0", Error = new List<string> { "Error1" } }); commandFactory.Stub(x => x.CreateCommand(Arg<string>.Is.Anything)).Return(executableCommand); commandQueue.Work(); }