public void TestAlertWithConnectionAndHosts()
        {
            XenServerPatch p = new XenServerPatch("uuid", "name", "My description", "guidance", "6.0.1", "http://url", "http://patchUrl", new DateTime(2011, 4, 1).ToString(), "");
            XenServerPatchAlert alert = new XenServerPatchAlert(p);
            alert.IncludeConnection(connA.Object);
            alert.IncludeConnection(connB.Object);
            alert.IncludeHosts(new List<Host>() { hostA.Object, hostB.Object });

            IUnitTestVerifier validator = new VerifyGetters(alert);

            validator.Verify(new AlertClassUnitTestData
            {
                AppliesTo = "HostAName, HostBName, ConnAName, ConnBName",
                FixLinkText = "Go to Web Page",
                HelpID = "XenServerPatchAlert",
                Description = "My description",
                HelpLinkText = "Help",
                Title = "New Update Available - name",
                Priority = "Priority2"
            });

            Assert.IsFalse(alert.CanIgnore);

            VerifyConnExpectations(Times.Once);
            VerifyHostsExpectations(Times.Once);
        }
示例#2
0
 public void AddAlert(XenServerPatchAlert alert)
 {
     PatchingWizard_SelectPatchPage.SelectDownloadAlert(alert);
     PatchingWizard_SelectPatchPage.SelectedUpdateAlert = alert;
     PatchingWizard_SelectServers.SelectedUpdateAlert = alert;
     PatchingWizard_UploadPage.SelectedUpdateAlert = alert;
 }
示例#3
0
        private void DownloadPatchFile(XenServerPatchAlert patch)
        {
            if(string.IsNullOrEmpty(patch.Patch.PatchUrl))
            {
                Results.Add("Patch conatined no URL: " + patch.Patch.Name);
                return;
            }

            string tempFileName = NewTempPath();
            DownloadAndUnzipXenServerPatchAction action = new DownloadAndUnzipXenServerPatchAction(patch.Patch.Name, 
                                                                    new Uri(patch.Patch.PatchUrl), 
                                                                    tempFileName);
            try
            {
                Status = "Download and unzip patch " + patch.Patch.Name;

                ConsoleSpinner spinner = new ConsoleSpinner();
                action.RunAsync();
                while(!action.IsCompleted)
                {
                    spinner.Turn(action.PercentComplete);
                }
                
                if(!action.Succeeded)
                    Results.Add("Patch download and unzip unsuccessful: " + action.Exception.Message);
            }
            catch (Exception ex)
            {
                Results.Add("Patch download error: " + ex.Message);
            }

        }
示例#4
0
 public void CopyConnectionsAndHosts(XenServerPatchAlert alert)
 {
     connections.Clear();
     connections.AddRange(alert.connections);
     hosts.Clear();
     hosts.AddRange(alert.hosts);
     canIgnore = connections.Count == 0 && hosts.Count == 0;
 }
 private void VerifyPatchDetailsMissing(XenServerPatchAlert alert)
 {
     if(string.IsNullOrEmpty(alert.Patch.Uuid))
         Results.Add("Missing patch uuid for patch: " + alert.Patch.Name);
     if(string.IsNullOrEmpty(alert.Patch.Name))
         Results.Add("Missing patch name for patch with UUID: " + alert.Patch.Uuid);
     if(string.IsNullOrEmpty(alert.Patch.PatchUrl))
         Results.Add("Missing patch patch-url for patch with UUID: " + alert.Patch.Uuid);
     if (string.IsNullOrEmpty(alert.Patch.Description))
         Results.Add("Missing patch description for patch with UUID: " + alert.Patch.Uuid);
     if (string.IsNullOrEmpty(alert.Patch.Url))
         Results.Add("Missing patch webpage url for patch with UUID: " + alert.Patch.Uuid);
     if (string.IsNullOrEmpty(alert.Patch.Guidance))
         Results.Add("Missing patch guidance for patch with UUID: " + alert.Patch.Uuid);
     if (string.IsNullOrEmpty(alert.Patch.TimeStamp.ToString()))
         Results.Add("Missing patch timestamp for patch with UUID: " + alert.Patch.Uuid);
 }
 public void TestAlertWithNullPatch()
 {
     XenServerPatchAlert alert = new XenServerPatchAlert(null);
 }
        public void TestAlertWithNoConnectionAndNoHosts()
        {
            XenServerPatch p = new XenServerPatch("uuid", "name", "My description", "guidance", "6.0.1", "http://url", "http://patchUrl", new DateTime(2011, 4, 1).ToString(), "5");
            XenServerPatchAlert alert = new XenServerPatchAlert(p);

            IUnitTestVerifier validator = new VerifyGetters(alert);

            validator.Verify(new AlertClassUnitTestData
            {
                AppliesTo = string.Empty,
                FixLinkText = "Go to Web Page",
                HelpID = "XenServerPatchAlert",
                Description = "My description",
                HelpLinkText = "Help",
                Title = "New Update Available - name",
                Priority = "Priority5"
            });

            Assert.IsTrue(alert.CanIgnore);

            VerifyConnExpectations(Times.Never);
            VerifyHostsExpectations(Times.Never);
        }
示例#8
0
        private static XenServerPatchAlert GetServerPatchAlert(List<XenServerPatchAlert> alerts, XenServerPatch patch)
        {
            XenServerPatchAlert alert = new XenServerPatchAlert(patch);
            XenServerPatchAlert existingAlert = alerts.Find(al => al.Equals(alert));
            if (existingAlert != null)
                alert = existingAlert;
            else
                alerts.Add(alert);

            return alert;
        }
示例#9
0
        public static List<XenServerPatchAlert> NewXenServerPatchAlerts(List<XenServerVersion> xenServerVersions,
            List<XenServerPatch> xenServerPatches)
        {
            if (Helpers.CommonCriteriaCertificationRelease)
                return null;

            var alerts = new List<XenServerPatchAlert>();

            foreach (IXenConnection xenConnection in ConnectionsManager.XenConnectionsCopy)
            {
                Host master = Helpers.GetMaster(xenConnection);
                Pool pool = Helpers.GetPoolOfOne(xenConnection);
                List<Host> hosts = xenConnection.Cache.Hosts.ToList();
                if (master == null || pool == null)
                    continue;

                var serverVersions = xenServerVersions.FindAll(version =>
                                                  {
                                                      if (version.BuildNumber != string.Empty)
                                                          return (master.BuildNumberRaw == version.BuildNumber);

                                                      return Helpers.HostProductVersionWithOEM(master) == version.VersionAndOEM
                                                             || (version.Oem != null && Helpers.OEMName(master).StartsWith(version.Oem)
                                                                 && Helpers.HostProductVersion(master) == version.Version.ToString());
                                                  });

                if (serverVersions.Count == 0)
                    continue;

                foreach (XenServerVersion xenServerVersion in serverVersions)
                {
                    XenServerVersion version = xenServerVersion;
                    List<XenServerPatch> patches = xenServerPatches.FindAll(patch => version.Patches.Contains(patch));

                    if (patches.Count == 0)
                        continue;

                    foreach (XenServerPatch xenServerPatch in patches)
                    {
                        var alert = new XenServerPatchAlert(xenServerPatch);
                        var existingAlert = alerts.Find(al => al.Equals(alert));

                        if (existingAlert != null)
                            alert = existingAlert;
                        else
                            alerts.Add(alert);

                        if (!xenConnection.IsConnected)
                            continue;

                        XenServerPatch serverPatch = xenServerPatch;

                        // A patch can be installed on a host if:
                        // 1. it is not already installed and
                        // 2. the host has all the required patches installed and
                        // 3. the host doesn't have any of the conflicting patches installed

                        var noPatchHosts = hosts.Where(host =>
                            {
                                var appliedPatches = host.AppliedPatches();
                                // 1. patch is not already installed 
                                if (appliedPatches.Any(patch => string.Equals(patch.uuid, serverPatch.Uuid, StringComparison.OrdinalIgnoreCase)))
                                    return false;

                                // 2. the host has all the required patches installed
                                if (serverPatch.RequiredPatches != null && serverPatch.RequiredPatches.Count > 0 &&
                                    !serverPatch.RequiredPatches.All(requiredPatchUuid => appliedPatches.Any(patch => string.Equals(patch.uuid, requiredPatchUuid, StringComparison.OrdinalIgnoreCase))))
                                    return false;

                                // 3. the host doesn't have any of the conflicting patches installed
                                if (serverPatch.ConflictingPatches != null && serverPatch.ConflictingPatches.Count > 0 &&
                                    serverPatch.ConflictingPatches.Any(conflictingPatchUuid => appliedPatches.Any(patch => string.Equals(patch.uuid, conflictingPatchUuid, StringComparison.OrdinalIgnoreCase))))
                                    return false;

                                return true;
                            });

                        if (noPatchHosts.Count() == hosts.Count)
                            alert.IncludeConnection(xenConnection);
                        else
                            alert.IncludeHosts(noPatchHosts);
                    }
                }
            }

            return alerts;
        }
 public void CopyConnectionsAndHosts(XenServerPatchAlert alert)
 {
     connections.Clear();
     connections.AddRange(alert.connections);
     hosts.Clear();
     hosts.AddRange(alert.hosts);
     canIgnore = connections.Count == 0 && hosts.Count == 0;
 }