/// <exception cref="System.IO.IOException"/> private NodeStatus GetNodeStatus(int responseId) { NodeHealthStatus nodeHealthStatus = this.context.GetNodeHealthStatus(); nodeHealthStatus.SetHealthReport(healthChecker.GetHealthReport()); nodeHealthStatus.SetIsNodeHealthy(healthChecker.IsHealthy()); nodeHealthStatus.SetLastHealthReportTime(healthChecker.GetLastHealthReportTime()); if (Log.IsDebugEnabled()) { Log.Debug("Node's health-status : " + nodeHealthStatus.GetIsNodeHealthy() + ", " + nodeHealthStatus.GetHealthReport()); } IList <ContainerStatus> containersStatuses = GetContainerStatuses(); NodeStatus nodeStatus = NodeStatus.NewInstance(nodeId, responseId, containersStatuses , CreateKeepAliveApplicationList(), nodeHealthStatus); return(nodeStatus); }
public virtual void TestNodeHealthScript() { RecordFactory factory = RecordFactoryProvider.GetRecordFactory(null); NodeHealthStatus healthStatus = factory.NewRecordInstance <NodeHealthStatus>(); string errorScript = "echo ERROR\n echo \"Tracker not healthy\""; string normalScript = "echo \"I am all fine\""; string timeOutScript = Shell.Windows ? "@echo off\nping -n 4 127.0.0.1 >nul\necho \"I am fine\"" : "sleep 4\necho \"I am fine\""; Configuration conf = GetConfForNodeHealthScript(); conf.WriteXml(new FileOutputStream(nodeHealthConfigFile)); conf.AddResource(nodeHealthConfigFile.GetName()); WriteNodeHealthScriptFile(normalScript, true); NodeHealthCheckerService nodeHealthChecker = new NodeHealthCheckerService(); nodeHealthChecker.Init(conf); NodeHealthScriptRunner nodeHealthScriptRunner = nodeHealthChecker.GetNodeHealthScriptRunner (); TimerTask timerTask = nodeHealthScriptRunner.GetTimerTask(); timerTask.Run(); SetHealthStatus(healthStatus, nodeHealthChecker.IsHealthy(), nodeHealthChecker.GetHealthReport (), nodeHealthChecker.GetLastHealthReportTime()); Log.Info("Checking initial healthy condition"); // Check proper report conditions. NUnit.Framework.Assert.IsTrue("Node health status reported unhealthy", healthStatus .GetIsNodeHealthy()); NUnit.Framework.Assert.IsTrue("Node health status reported unhealthy", healthStatus .GetHealthReport().Equals(nodeHealthChecker.GetHealthReport())); // write out error file. // Healthy to unhealthy transition WriteNodeHealthScriptFile(errorScript, true); // Run timer timerTask.Run(); // update health status SetHealthStatus(healthStatus, nodeHealthChecker.IsHealthy(), nodeHealthChecker.GetHealthReport (), nodeHealthChecker.GetLastHealthReportTime()); Log.Info("Checking Healthy--->Unhealthy"); NUnit.Framework.Assert.IsFalse("Node health status reported healthy", healthStatus .GetIsNodeHealthy()); NUnit.Framework.Assert.IsTrue("Node health status reported healthy", healthStatus .GetHealthReport().Equals(nodeHealthChecker.GetHealthReport())); // Check unhealthy to healthy transitions. WriteNodeHealthScriptFile(normalScript, true); timerTask.Run(); SetHealthStatus(healthStatus, nodeHealthChecker.IsHealthy(), nodeHealthChecker.GetHealthReport (), nodeHealthChecker.GetLastHealthReportTime()); Log.Info("Checking UnHealthy--->healthy"); // Check proper report conditions. NUnit.Framework.Assert.IsTrue("Node health status reported unhealthy", healthStatus .GetIsNodeHealthy()); NUnit.Framework.Assert.IsTrue("Node health status reported unhealthy", healthStatus .GetHealthReport().Equals(nodeHealthChecker.GetHealthReport())); // Healthy to timeout transition. WriteNodeHealthScriptFile(timeOutScript, true); timerTask.Run(); SetHealthStatus(healthStatus, nodeHealthChecker.IsHealthy(), nodeHealthChecker.GetHealthReport (), nodeHealthChecker.GetLastHealthReportTime()); Log.Info("Checking Healthy--->timeout"); NUnit.Framework.Assert.IsFalse("Node health status reported healthy even after timeout" , healthStatus.GetIsNodeHealthy()); NUnit.Framework.Assert.IsTrue("Node script time out message not propogated", healthStatus .GetHealthReport().Equals(NodeHealthScriptRunner.NodeHealthScriptTimedOutMsg + NodeHealthCheckerService .Separator + nodeHealthChecker.GetDiskHandler().GetDisksHealthReport(false))); }