NetworkStatusTestV2.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using System;
  2. using System.Linq;
  3. using System.Net;
  4. using System.Net.NetworkInformation;
  5. using System.Net.Sockets;
  6. using Vinno.IUS.Common.Log;
  7. namespace Vinno.vCloud.Common.FIS.Test
  8. {
  9. public class NetworkStatusTestV2 : VCloudTestItem
  10. {
  11. private readonly string _networkStatusTestError1 = "NetworkStatusTestError1";
  12. private readonly string _networkStatusTestError2 = "NetworkStatusTestError2";
  13. private readonly string _networkStatusTestError3 = "NetworkStatusTestError3";
  14. public NetworkStatusTestV2(VCloudServiceTest vCloudServiceTest) : base("NetworkStatus", vCloudServiceTest)
  15. {
  16. }
  17. public override VCloudServiceTestResult Execute()
  18. {
  19. //Check if network connected
  20. if (!CheckNetworkConnected())
  21. {
  22. return new VCloudServiceTestResult(Id, VCloudTestItemStatus.TestFailed, _networkStatusTestError1, "(101)");//ErrorCode=101
  23. }
  24. //Get ip from dns
  25. var result = TimeoutExecute(CheckIfvCloudHostIpAvailable);
  26. if (result == VCloudSubItemTestStatus.Timeout)
  27. {
  28. return new VCloudServiceTestResult(Id, VCloudTestItemStatus.TestFailed, TimeoutError, "(102)");//ErrorCode=102
  29. }
  30. if (result == VCloudSubItemTestStatus.Failed)
  31. {
  32. return new VCloudServiceTestResult(Id, VCloudTestItemStatus.TestFailed, _networkStatusTestError3, "(103)");//ErrorCode=103
  33. }
  34. return new VCloudServiceTestResult(Id, VCloudTestItemStatus.TestDone);
  35. }
  36. private VCloudSubItemTestStatus CheckIfvCloudHostIpAvailable()
  37. {
  38. var ipAddress = GetIpAddress(VCloudServiceTest.VCloudHost);
  39. if (ipAddress == null)
  40. {
  41. return VCloudSubItemTestStatus.Failed;
  42. }
  43. return VCloudSubItemTestStatus.Successful;
  44. }
  45. private bool CheckNetworkConnected()
  46. {
  47. var networkAvailable = NetworkInterface.GetIsNetworkAvailable();
  48. if (!networkAvailable)
  49. {
  50. return false;
  51. }
  52. return true;
  53. }
  54. private IPAddress GetIpAddress(string host)
  55. {
  56. IPAddress address = null;
  57. IPAddress[] ipAddresses = null;
  58. try
  59. {
  60. ipAddresses = Dns.GetHostAddresses(host);
  61. //This is for normal case to get the ipv4 address.
  62. address = ipAddresses?.FirstOrDefault(x => x.AddressFamily == AddressFamily.InterNetwork);
  63. }
  64. catch (Exception ex)
  65. {
  66. Logger.WriteLineError($"TestNetworkStatus - Get hosts address from dns failed.{ex}");
  67. }
  68. return address;
  69. }
  70. }
  71. }