mirror of
https://github.com/xcp-ng/xenadmin.git
synced 2024-12-22 16:36:03 +01:00
6e9e053dea
are more than one hosts selected. Signed-off-by: Konstantina Chremmou <konstantina.chremmou@citrix.com>
341 lines
16 KiB
C#
341 lines
16 KiB
C#
/* Copyright (c) Citrix Systems Inc.
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms,
|
|
* with or without modification, are permitted provided
|
|
* that the following conditions are met:
|
|
*
|
|
* * Redistributions of source code must retain the above
|
|
* copyright notice, this list of conditions and the
|
|
* following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the
|
|
* following disclaimer in the documentation and/or other
|
|
* materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
|
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
|
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*/
|
|
|
|
using System.Collections.Generic;
|
|
using Moq;
|
|
using NUnit.Framework;
|
|
using XenAdmin.Controls.CheckableDataGridView;
|
|
using XenAdmin.Dialogs;
|
|
using XenAdminTests.UnitTests.UnitTestHelper.MockObjectBuilders;
|
|
using XenAPI;
|
|
|
|
namespace XenAdminTests.LicensingTests
|
|
{
|
|
public class LicenseManagerTests : UnitTester_SingleConnectionTestFixture
|
|
{
|
|
private Mock<ILicenseManagerView> view;
|
|
private Mock<ILicenseActivationRequest> activation;
|
|
|
|
private class TestCase
|
|
{
|
|
public ObjectBuilderType MockType;
|
|
public Host.Edition License = Host.Edition.Free;
|
|
}
|
|
|
|
[SetUp]
|
|
public void SetupMocks()
|
|
{
|
|
view = new Mock<ILicenseManagerView>();
|
|
activation = new Mock<ILicenseActivationRequest>();
|
|
ObjectManager.ClearXenObjects(id);
|
|
}
|
|
|
|
private List<CheckableDataGridViewRow> CreateList(params TestCase[] testCases)
|
|
{
|
|
List<CheckableDataGridViewRow> rows = new List<CheckableDataGridViewRow>();
|
|
foreach (TestCase tc in testCases)
|
|
{
|
|
Mock<Host> mh = ObjectFactory.BuiltObject<Host>(tc.MockType, id);
|
|
Mock<ILicenseStatus> status = new Mock<ILicenseStatus>();
|
|
status.Setup(s => s.LicenseEdition).Returns(tc.License);
|
|
|
|
if (tc.License != Host.Edition.Free)
|
|
{
|
|
mh.Setup(h => h.license_server).Returns(new Dictionary<string, string>
|
|
{{"address", "address"}, {"port", "port"}});
|
|
}
|
|
rows.Add(new LicenseDataGridViewRow(mh.Object, status.Object));
|
|
}
|
|
|
|
return rows;
|
|
}
|
|
|
|
[Test, Category(TestCategories.SmokeTest)]
|
|
public void ButtonEnablementForNoSelection()
|
|
{
|
|
LicenseManagerController licenseSummary = new LicenseManagerController(view.Object);
|
|
view.Setup(v => v.GetCheckedRows).Returns(new List<CheckableDataGridViewRow>());
|
|
licenseSummary.UpdateButtonEnablement();
|
|
view.Verify(v => v.DrawActivateButtonAsDisabled(true));
|
|
view.Verify(v => v.DrawAssignButtonAsDisabled(true));
|
|
view.Verify(v => v.DrawReleaseButtonAsDisabled(true));
|
|
view.Verify(v => v.DrawActivateButtonAsHidden(false));
|
|
}
|
|
|
|
[Test, Category(TestCategories.SmokeTest)]
|
|
public void ButtonEnablementForUnlicensedClearwaterSelection()
|
|
{
|
|
LicenseManagerController licenseSummary = new LicenseManagerController(view.Object)
|
|
{
|
|
VerifierFactory = new BlanketResponseSelectionVerifierFactory(new AllOkVerifier()),
|
|
ActivationRequest = activation.Object
|
|
};
|
|
|
|
activation.Setup(a => a.AllHostsCanBeActivated).Returns(true);
|
|
activation.Setup(a => a.HostsThatCanBeActivated).Returns(() => new List<Host>().AsReadOnly());
|
|
view.Setup(v => v.GetCheckedRows).Returns(CreateList(new TestCase { MockType = ObjectBuilderType.ClearwaterHost}));
|
|
|
|
licenseSummary.UpdateButtonEnablement();
|
|
view.Verify(v => v.DrawAssignButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawReleaseButtonAsDisabled(true));
|
|
view.Verify(v => v.DrawApplyButtonAsDisabled(false, null));
|
|
view.Verify(v => v.DrawRequestButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawActivateButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawActivateButtonAsHidden(true));
|
|
}
|
|
|
|
[Test, Category(TestCategories.SmokeTest)]
|
|
public void ButtonEnablementForLicensedClearwaterSelection()
|
|
{
|
|
LicenseManagerController licenseSummary = new LicenseManagerController(view.Object)
|
|
{
|
|
VerifierFactory = new BlanketResponseSelectionVerifierFactory(new AllOkVerifier()),
|
|
ActivationRequest = activation.Object
|
|
};
|
|
|
|
activation.Setup(a => a.AllHostsCanBeActivated).Returns(true);
|
|
activation.Setup(a => a.HostsThatCanBeActivated).Returns(() => new List<Host>().AsReadOnly());
|
|
view.Setup(v => v.GetCheckedRows).Returns(CreateList(new TestCase {
|
|
MockType = ObjectBuilderType.ClearwaterHost,
|
|
License = Host.Edition.PerSocket}));
|
|
|
|
licenseSummary.UpdateButtonEnablement();
|
|
view.Verify(v => v.DrawAssignButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawReleaseButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawActivateButtonAsHidden(true));
|
|
view.Verify(v => v.DrawApplyButtonAsDisabled(false, null));
|
|
view.Verify(v => v.DrawRequestButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawActivateButtonAsDisabled(false));
|
|
|
|
}
|
|
|
|
[Test, Category(TestCategories.SmokeTest)]
|
|
public void ButtonEnablementForTwoLicensedClearwaterSelection()
|
|
{
|
|
LicenseManagerController licenseSummary = new LicenseManagerController(view.Object)
|
|
{
|
|
VerifierFactory = new BlanketResponseSelectionVerifierFactory(new AllOkVerifier()),
|
|
ActivationRequest = activation.Object
|
|
};
|
|
|
|
activation.Setup(a => a.AllHostsCanBeActivated).Returns(true);
|
|
activation.Setup(a => a.HostsThatCanBeActivated).Returns(() => new List<Host>().AsReadOnly());
|
|
view.Setup(v => v.GetCheckedRows).Returns(CreateList(
|
|
new TestCase
|
|
{
|
|
MockType = ObjectBuilderType.ClearwaterHost,
|
|
License = Host.Edition.PerSocket
|
|
},
|
|
new TestCase
|
|
{
|
|
MockType = ObjectBuilderType.ClearwaterHost,
|
|
License = Host.Edition.PerSocket
|
|
}));
|
|
|
|
licenseSummary.UpdateButtonEnablement();
|
|
view.Verify(v => v.DrawAssignButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawReleaseButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawActivateButtonAsHidden(true));
|
|
view.Verify(v => v.DrawApplyButtonAsDisabled(false, null));
|
|
view.Verify(v => v.DrawRequestButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawActivateButtonAsDisabled(false));
|
|
}
|
|
|
|
[Test, Category(TestCategories.SmokeTest)]
|
|
public void ButtonEnablementForTwoMixedLicenseClearwaterSelection()
|
|
{
|
|
LicenseManagerController licenseSummary = new LicenseManagerController(view.Object)
|
|
{
|
|
VerifierFactory = new BlanketResponseSelectionVerifierFactory(new AllOkVerifier()),
|
|
ActivationRequest = activation.Object
|
|
};
|
|
|
|
activation.Setup(a => a.AllHostsCanBeActivated).Returns(true);
|
|
activation.Setup(a => a.HostsThatCanBeActivated).Returns(() => new List<Host>().AsReadOnly());
|
|
view.Setup(v => v.GetCheckedRows).Returns(CreateList(
|
|
new TestCase
|
|
{
|
|
MockType = ObjectBuilderType.ClearwaterHost,
|
|
License = Host.Edition.PerSocket
|
|
},
|
|
new TestCase
|
|
{
|
|
MockType = ObjectBuilderType.ClearwaterHost,
|
|
License = Host.Edition.Free
|
|
}));
|
|
|
|
licenseSummary.UpdateButtonEnablement();
|
|
view.Verify(v => v.DrawAssignButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawReleaseButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawActivateButtonAsHidden(true));
|
|
view.Verify(v => v.DrawApplyButtonAsDisabled(false, null));
|
|
view.Verify(v => v.DrawRequestButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawActivateButtonAsDisabled(false));
|
|
}
|
|
|
|
[Test, Category(TestCategories.SmokeTest)]
|
|
public void ButtonEnablementForUnlicensedTampaSelection()
|
|
{
|
|
LicenseManagerController licenseSummary = new LicenseManagerController(view.Object)
|
|
{
|
|
VerifierFactory = new BlanketResponseSelectionVerifierFactory(new AllOkVerifier()),
|
|
ActivationRequest = activation.Object
|
|
};
|
|
|
|
activation.Setup(a => a.AllHostsCanBeActivated).Returns(true);
|
|
activation.Setup(a => a.HostsThatCanBeActivated).Returns(() => new List<Host> { new Host() }.AsReadOnly());
|
|
view.Setup(v => v.GetCheckedRows).Returns(CreateList(new TestCase
|
|
{
|
|
MockType = ObjectBuilderType.TampaHost,
|
|
License = Host.Edition.Free
|
|
}));
|
|
|
|
licenseSummary.UpdateButtonEnablement();
|
|
view.Verify(v => v.DrawAssignButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawReleaseButtonAsDisabled(true));
|
|
view.Verify(v => v.DrawActivateButtonAsHidden(false));
|
|
view.Verify(v => v.DrawApplyButtonAsDisabled(false, null));
|
|
view.Verify(v => v.DrawRequestButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawActivateButtonAsDisabled(false));
|
|
}
|
|
|
|
[Test, Category(TestCategories.SmokeTest)]
|
|
public void ButtonEnablementForMulitpleMixedTampaSelection()
|
|
{
|
|
LicenseManagerController licenseSummary = new LicenseManagerController(view.Object)
|
|
{
|
|
VerifierFactory = new BlanketResponseSelectionVerifierFactory(new AllOkVerifier()),
|
|
ActivationRequest = activation.Object
|
|
};
|
|
|
|
activation.Setup(a => a.AllHostsCanBeActivated).Returns(true);
|
|
activation.Setup(a => a.HostsThatCanBeActivated).Returns(() => new List<Host> { new Host() }.AsReadOnly());
|
|
view.Setup(v => v.GetCheckedRows).Returns(CreateList(
|
|
new TestCase
|
|
{
|
|
MockType = ObjectBuilderType.TampaHost,
|
|
License = Host.Edition.Advanced
|
|
},
|
|
new TestCase
|
|
{
|
|
MockType = ObjectBuilderType.TampaHost,
|
|
License = Host.Edition.Free
|
|
}
|
|
));
|
|
|
|
licenseSummary.UpdateButtonEnablement();
|
|
view.Verify(v => v.DrawAssignButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawReleaseButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawActivateButtonAsHidden(false));
|
|
view.Verify(v => v.DrawApplyButtonAsDisabled(false, null));
|
|
view.Verify(v => v.DrawRequestButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawActivateButtonAsDisabled(false));
|
|
}
|
|
|
|
[Test, Category(TestCategories.SmokeTest)]
|
|
public void ButtonEnablementForLicensedTampaSelection()
|
|
{
|
|
LicenseManagerController licenseSummary = new LicenseManagerController(view.Object)
|
|
{
|
|
VerifierFactory = new BlanketResponseSelectionVerifierFactory(new AllOkVerifier()),
|
|
ActivationRequest = activation.Object
|
|
};
|
|
|
|
activation.Setup(a => a.AllHostsCanBeActivated).Returns(true);
|
|
activation.Setup(a => a.HostsThatCanBeActivated).Returns(() => new List<Host>().AsReadOnly());
|
|
view.Setup(v => v.GetCheckedRows).Returns(CreateList(new TestCase
|
|
{
|
|
MockType = ObjectBuilderType.TampaHost,
|
|
License = Host.Edition.Advanced
|
|
}));
|
|
|
|
licenseSummary.UpdateButtonEnablement();
|
|
view.Verify(v => v.DrawAssignButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawReleaseButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawActivateButtonAsHidden(false));
|
|
view.Verify(v => v.DrawApplyButtonAsDisabled(false, null));
|
|
view.Verify(v => v.DrawRequestButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawActivateButtonAsDisabled(false));
|
|
}
|
|
|
|
[Test, Category(TestCategories.SmokeTest)]
|
|
public void ButtonEnablementForUnactivatableHosts()
|
|
{
|
|
LicenseManagerController licenseSummary = new LicenseManagerController(view.Object)
|
|
{
|
|
VerifierFactory = new BlanketResponseSelectionVerifierFactory(new AllOkVerifier()),
|
|
ActivationRequest = activation.Object
|
|
};
|
|
|
|
activation.Setup(a => a.AllHostsCanBeActivated).Returns(false);
|
|
activation.Setup(a => a.HostsThatCanBeActivated).Returns(() => new List<Host>().AsReadOnly());
|
|
view.Setup(v => v.GetCheckedRows).Returns(CreateList(new TestCase
|
|
{
|
|
MockType = ObjectBuilderType.RioHost,
|
|
License = Host.Edition.Free
|
|
}));
|
|
|
|
licenseSummary.UpdateButtonEnablement();
|
|
view.Verify(v => v.DrawAssignButtonAsDisabled(false));
|
|
view.Verify(v => v.DrawReleaseButtonAsDisabled(true));
|
|
view.Verify(v => v.DrawActivateButtonAsHidden(true));
|
|
view.Verify(v => v.DrawApplyButtonAsDisabled(true, null));
|
|
view.Verify(v => v.DrawRequestButtonAsDisabled(true));
|
|
view.Verify(v => v.DrawActivateButtonAsDisabled(true));
|
|
}
|
|
|
|
[Test, Category(TestCategories.SmokeTest)]
|
|
public void ButtonEnablementForFailingVerifier()
|
|
{
|
|
LicenseManagerController licenseSummary = new LicenseManagerController(view.Object)
|
|
{
|
|
VerifierFactory = new BlanketResponseSelectionVerifierFactory(new AllNotOkVerifier()),
|
|
ActivationRequest = activation.Object
|
|
};
|
|
|
|
view.Setup(v => v.GetCheckedRows).Returns(CreateList(new TestCase
|
|
{
|
|
MockType = ObjectBuilderType.BostonHost,
|
|
License = Host.Edition.Free
|
|
}));
|
|
|
|
licenseSummary.UpdateButtonEnablement();
|
|
view.Verify(v => v.DrawActivateButtonAsDisabled(true));
|
|
view.Verify(v => v.DrawAssignButtonAsDisabled(true));
|
|
view.Verify(v => v.DrawReleaseButtonAsDisabled(true));
|
|
view.Verify(v => v.DrawActivateButtonAsHidden(false));
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|