2017-01-16 20:59:50 +01:00
/ * Copyright ( c ) Citrix Systems , Inc .
2013-06-24 13:41:48 +02:00
* 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 ;
using System.Collections.Generic ;
using System.Text ;
using NUnit.Framework ;
using XenAdmin.Controls.DataGridViewEx ;
using XenAdmin.Wizards.NewVMWizard ;
using XenAdmin.ServerDBs ;
using XenAPI ;
using XenAdmin ;
using System.Windows.Forms ;
namespace XenAdminTests.WizardTests.state4_xml
{
/// <summary>
/// Tests that VM.Clone is called when using the New VM Wizard with a user template with default storage settings.
/// </summary>
public abstract class NewVMWizardBiosStringsTest : WizardTest < NewVMWizard >
{
protected bool _copyBiosStringsInvoked ;
protected NewVMWizardBiosStringsTest ( string [ ] pages )
: base ( pages , true , true )
{
Assert . AreEqual ( 1 , DbProxy . proxys . Count ) ;
DbProxy . proxys [ ConnectionsManager . XenConnectionsCopy [ 0 ] ] . Invoking + = DbProxy_Invoking ;
}
protected void DbProxy_Invoking ( object sender , DbProxyInvokingEventArgs e )
{
_copyBiosStringsInvoked | = e . ProxyMethodInfo . MethodName = = "copy_bios_strings" & & e . ProxyMethodInfo . TypeName = = "vm" ;
}
protected static int FindRow ( DataGridView gridView , VM v )
{
DataGridViewRowCollection rows = gridView . Rows ;
for ( int i = 0 ; i < rows . Count ; + + i )
{
Page_Template . TemplatesGridViewItem row = ( Page_Template . TemplatesGridViewItem ) rows [ i ] ;
if ( row . Template = = v )
return i ;
}
return - 1 ; // no matches
}
}
[TestFixture, Category(TestCategories.UICategoryB)]
public class NewVMWizardBiosStringsSnapshotTest : NewVMWizardBiosStringsTest
{
public NewVMWizardBiosStringsSnapshotTest ( )
: base ( new [ ] { "Template" , "BIOS Strings" , "Name" , "Installation Media" , "Home Server" , "CPU && Memory" , "Storage" , "Networking" , "Finish" } )
{
Assert . AreEqual ( 1 , DbProxy . proxys . Count ) ;
DbProxy . proxys [ ConnectionsManager . XenConnectionsCopy [ 0 ] ] . Invoking + = DbProxy_Invoking ;
}
protected override NewVMWizard NewWizard ( )
{
VM snapshot = GetAnySnapshot ( v = > v . name_label ! = "orphaned snapshot" ) ;
Assert . NotNull ( snapshot , "Snapshot not found." ) ;
List < Host > hosts = new List < Host > ( snapshot . Connection . Cache . Hosts ) ;
Assert . IsTrue ( hosts . Count > 0 ) ;
hosts . Sort ( ) ;
return new NewVMWizard ( snapshot . Connection , snapshot , hosts [ 0 ] ) ;
}
protected override void TestPage ( string pageName )
{
if ( pageName = = "Template" )
{
var gridView = TestUtils . GetDataGridView ( wizard , "page_1_Template.TemplatesGridView" ) ;
var checkBox = TestUtils . GetCheckBox ( wizard , "page_1_Template.checkBoxCopyBiosStrings" ) ;
MWWaitFor ( ( ) = > gridView . SelectedRows . Count = = 1 , "First item (snapshot) wasn't selected by default." ) ;
int row1 = gridView . SelectedRows [ 0 ] . Index ;
MW ( ( ) = >
{
Assert . IsTrue ( checkBox . Checked , "Checkbox should be checked for BIOS locked snapshot." ) ;
Assert . IsFalse ( checkBox . Enabled , "Checkbox should be disabled for BIOS locked snapshot." ) ;
} ) ;
// select a Windows template
2017-09-03 04:33:29 +02:00
VM defaultTemplate = GetAnyDefaultTemplate ( v = > v . IsHVM ( ) & & v . name_label ! = "orphaned snapshot" ) ;
2013-06-24 13:41:48 +02:00
int row2 = FindRow ( gridView , defaultTemplate ) ;
MW ( ( ) = > gridView . Rows [ row2 ] . Selected = true ) ;
MWWaitFor ( ( ) = > ! checkBox . Checked , "Checkbox was checked for default-template." ) ;
MW ( ( ) = > Assert . IsTrue ( checkBox . Enabled , "Checkbox should be enabled when default-template selected." ) ) ;
// check the checkbox and move to the previous selection
MW ( ( ) = >
{
checkBox . Checked = true ;
gridView . Rows [ row1 ] . Selected = true ;
} ) ;
MWWaitFor ( ( ) = > checkBox . Checked , "Checkbox should remain checked when moving from default-template to BIOS locked snapshot" ) ;
MW ( ( ) = > Assert . IsFalse ( checkBox . Enabled , "Checkbox should be disabled for for BIOS locked snapshot" ) ) ;
}
else if ( pageName = = "BIOS Strings" )
{
MWWaitFor ( ( ) = > TestUtils . GetDataGridView ( wizard , "page_1b_BiosLocking.ServersGridView" ) . RowCount = = 0 ) ;
}
else if ( pageName = = "Name" )
{
Assert . IsFalse ( TestUtils . GetXenTabPage ( wizard , "page_4_HomeServer" ) . DisableStep , "Home Server page should be enabled when BIOS locking checkbox is checked." ) ;
}
base . TestPage ( pageName ) ;
}
}
[TestFixture, Category(TestCategories.UICategoryB)]
public class NewVMWizardBiosStringsUserTemplateTest : NewVMWizardBiosStringsTest
{
public NewVMWizardBiosStringsUserTemplateTest ( )
: base ( new [ ] { "Template" , "Name" , "Installation Media" , "Home Server" , "CPU && Memory" , "Storage" , "Networking" , "Finish" } )
{
Assert . AreEqual ( 1 , DbProxy . proxys . Count ) ;
DbProxy . proxys [ ConnectionsManager . XenConnectionsCopy [ 0 ] ] . Invoking + = DbProxy_Invoking ;
}
protected override NewVMWizard NewWizard ( )
{
VM template = GetAnyUserTemplate ( ) ;
Assert . NotNull ( template , "User template not found not found." ) ;
List < Host > hosts = new List < Host > ( template . Connection . Cache . Hosts ) ;
Assert . IsTrue ( hosts . Count > 0 ) ;
hosts . Sort ( ) ;
return new NewVMWizard ( template . Connection , template , hosts [ 0 ] ) ;
}
protected override void TestPage ( string pageName )
{
if ( pageName = = "Template" )
{
var gridView = TestUtils . GetDataGridView ( wizard , "page_1_Template.TemplatesGridView" ) ;
var checkBox = TestUtils . GetCheckBox ( wizard , "page_1_Template.checkBoxCopyBiosStrings" ) ;
// select the non-bios locked user template
MWWaitFor ( ( ) = > gridView . SelectedRows . Count = = 1 , "First item (user template) wasn't selected by default." ) ;
int row1 = gridView . SelectedRows [ 0 ] . Index ;
MWWaitFor ( ( ) = > ! checkBox . Checked , "Checkbox was checked for non-BIOS locked user-template." ) ;
MW ( ( ) = > Assert . IsFalse ( checkBox . Enabled , "Checkbox should be disabled when user-template selected." ) ) ;
// select a Windows template
2017-09-03 04:33:29 +02:00
VM defaultTemplate = GetAnyDefaultTemplate ( v = > v . IsHVM ( ) ) ;
2013-06-24 13:41:48 +02:00
int row2 = FindRow ( gridView , defaultTemplate ) ;
MW ( ( ) = > gridView . Rows [ row2 ] . Selected = true ) ;
MWWaitFor ( ( ) = > ! checkBox . Checked , "Checkbox was checked for default-template." ) ;
MW ( ( ) = > Assert . IsTrue ( checkBox . Enabled , "Checkbox should be enabled when default-template selected." ) ) ;
// check the checkbox and move to the previous selection
MW ( ( ) = >
{
checkBox . Checked = true ;
gridView . Rows [ row1 ] . Selected = true ;
} ) ;
MWWaitFor ( ( ) = > ! checkBox . Checked , "Checkbox should not remain checked when moving from default-template to non-BIOS locked user-template." ) ;
MW ( ( ) = > Assert . IsFalse ( checkBox . Enabled , "Checkbox should be disabled when user-template selected." ) ) ;
}
else if ( pageName = = "Name" )
{
Assert . IsFalse ( TestUtils . GetXenTabPage ( wizard , "page_4_HomeServer" ) . DisableStep , "Home Server page should be enabled for non-BIOS locked user-template." ) ;
}
base . TestPage ( pageName ) ;
}
}
[TestFixture, Category(TestCategories.UICategoryB)]
public class NewVMWizardBiosStringsWindowsTemplateTest : NewVMWizardBiosStringsTest
{
public NewVMWizardBiosStringsWindowsTemplateTest ( )
: base ( new [ ] { "Template" , "BIOS Strings" , "Name" , "Installation Media" , "CPU && Memory" , "Storage" , "Networking" , "Finish" } )
{
Assert . AreEqual ( 1 , DbProxy . proxys . Count ) ;
DbProxy . proxys [ ConnectionsManager . XenConnectionsCopy [ 0 ] ] . Invoking + = DbProxy_Invoking ;
}
protected override NewVMWizard NewWizard ( )
{
2017-09-03 04:33:29 +02:00
VM defTemplate = GetAnyDefaultTemplate ( v = > v . IsHVM ( ) ) ;
2013-06-24 13:41:48 +02:00
Assert . NotNull ( defTemplate , "Default template not found." ) ;
List < Host > hosts = new List < Host > ( defTemplate . Connection . Cache . Hosts ) ;
Assert . IsTrue ( hosts . Count > 0 ) ;
hosts . Sort ( ) ;
return new NewVMWizard ( defTemplate . Connection , defTemplate , hosts [ 0 ] ) ;
}
protected override void TestPage ( string pageName )
{
if ( pageName = = "Template" )
{
var gridView = TestUtils . GetDataGridView ( wizard , "page_1_Template.TemplatesGridView" ) ;
var checkBox = TestUtils . GetCheckBox ( wizard , "page_1_Template.checkBoxCopyBiosStrings" ) ;
//select the windows template
MWWaitFor ( ( ) = > gridView . SelectedRows . Count = = 1 , "First item (windows template) wasn't selected by default." ) ;
MWWaitFor ( ( ) = > ! checkBox . Checked , "Checkbox was checked for default-template." ) ;
MW ( ( ) = > Assert . IsTrue ( checkBox . Enabled , "Checkbox should be enabled when default-template selected." ) ) ;
// select another default template
2017-09-03 04:33:29 +02:00
VM otherDefTemplate = GetAnyDefaultTemplate ( v = > v . IsHVM ( ) & & v ! = ( ( Page_Template . TemplatesGridViewItem ) gridView . SelectedRows [ 0 ] ) . Template ) ;
2013-06-24 13:41:48 +02:00
int row2 = FindRow ( gridView , otherDefTemplate ) ;
// check the checkbox and move to another default template
MW ( ( ) = >
{
checkBox . Checked = true ;
gridView . Rows [ row2 ] . Selected = true ;
} ) ;
MWWaitFor ( ( ) = > checkBox . Checked , "Checkbox should remain checked when moving from default-template to default-template" ) ;
MW ( ( ) = > Assert . IsTrue ( checkBox . Enabled , "Checkbox should be enabled for default-template" ) ) ;
}
else if ( pageName = = "BIOS Strings" )
{
MWWaitFor ( ( ) = > TestUtils . GetDataGridView ( wizard , "page_1b_BiosLocking.ServersGridView" ) . Rows [ 0 ] . Selected , "First row wasn't selected." ) ;
}
else if ( pageName = = "Name" )
{
Assert . IsTrue ( TestUtils . GetXenTabPage ( wizard , "page_4_HomeServer" ) . DisableStep , "Home Server page should be disabled when BIOS locking checkbox is checked." ) ;
}
base . TestPage ( pageName ) ;
}
protected override void RunAfter ( )
{
MWWaitFor ( ( ) = > wizard . Action . IsCompleted & & wizard . Action . Succeeded , "Wizard didn't succeed." ) ;
Assert . IsTrue ( _copyBiosStringsInvoked , "VM.copy_bios_strings wasn't called." ) ;
DbProxy . proxys [ ConnectionsManager . XenConnectionsCopy [ 0 ] ] . Invoking - = DbProxy_Invoking ;
}
}
}