<!-- 
******************************************************************
'
' vector.wsf
'
' Purpose: test vectors
'
' Parameters: none
'
' Returns:	0	- success
'		1	- failure
'
'*****************************************************************
-->

<job id="WMI Vector Test">
<reference object="WbemScripting.SWbemLocator" version="1.2"/>
<script language="VBScript">

on error resume next

set scriptHelper = CreateObject("WMIScriptHelper.WSC")
scriptHelper.logFile = "c:\temp\vector.txt"
scriptHelper.loggingLevel = 3
scriptHelper.testName = "WMI Vector"
scriptHelper.testStart

dim l
dim ns

TestPreamble
TestVectorOpen	
TestPostamble

scriptHelper.testComplete

if scriptHelper.statusOK then 
	WScript.Echo "PASS"
	WScript.Quit 0
else
	WScript.Echo "FAIL"
	WScript.Quit 1
end if

'******************************************************************
'
' TestPreamble
'
' Purpose: Create some objects for this test
'
'*****************************************************************

Sub TestPreamble

on error resume next

' Create a locator
set l = CreateObject("WbemScripting.SWbemLocatorEx")
if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to create locator"
else
	scriptHelper.writeToLog "Successful creation of locator", 2
end if	

' Connect to the namespace
set ns = l.ConnectServer (,"root\default")

if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to connect to root\default"
else
	scriptHelper.writeToLog "Successful connection to root\default", 2
end if	

' Make a new sub-namespace
set newNamespace = ns.Get("__Namespace").SpawnInstance_
if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to get new namespace"
else
	scriptHelper.writeToLog "Successful get of new namespace", 2
end if	


newNamespace.Name = "endpoint"
newNamespace.Put_

if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to create new namespace"
else
	scriptHelper.writeToLog "Successful creation of new namespace", 2
end if	

'Make a new class
set newClass = ns.Get

if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to get empty class"
else
	scriptHelper.writeToLog "Successful retrieval of empty class", 2
end if	

newClass.Path_.Class = "VECTOR000TEST"
newClass.Qualifiers_.Add "vector", true

' Add a key property (uint32)
set p0 = newClass.Properties_.Add ("p0", wbemCimtypeUint32)
p0.Qualifiers_.Add "key", true

' Add the vector pointer
set pV = newClass.Properties_.Add ("pV", wbemCimtypeReference)
 
if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to define class"
else
	scriptHelper.writeToLog "Successful definition of class", 2
end if	

' Save the class
newClass.Put_

if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to save class"
else
	scriptHelper.writeToLog "Successful save of class", 2
end if	

' Get it back and make an instance
set newInstance = ns.Get ("VECTOR000TEST").SpawnInstance_

if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to get new instance"
else
	scriptHelper.writeToLog "Successful get of new instance", 2
end if	

' Create an instance
newInstance.p0 = 1
newInstance.pV = "\\.\root\default:__Namespace='endpoint'"
newInstance.Put_

if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to create endpoint instance"
else
	scriptHelper.writeToLog "Successful creation of instance", 2
end if	

' Bind to the new namespace
set ns2 = GetObject("winmgmts:root\default\endpoint")
set newClass = ns2.Get
newClass.Path_.Class = "VECTOR001TEST"
newClass.Put_

if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to create class in endpoint namespace"
else
	scriptHelper.writeToLog "Successful creation of class in endpoint namespace", 2
end if	

End Sub

'******************************************************************
'
' TestPostamble
'
' Purpose: Create some objects for this test
'
'*****************************************************************

Sub TestPostamble

on error resume next

' Clean up
ns.Delete ("__Namespace='endpoint'")
ns.Delete ("VECTOR001TEST")

if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to delete classes"
else
	scriptHelper.writeToLog "Successful delete of classes", 2
end if	

End Sub 

'******************************************************************
'
' TestVectorOpen
'
' Purpose: test SWbemServicesEx vector functionality
'
'*****************************************************************

Sub TestVectorOpen

on error resume next 

scriptHelper.writeToLog ">>>", 2
scriptHelper.writeToLog ">>> TestVectorOpen", 2
scriptHelper.writeToLog ">>>", 2

' Open the instance as a vector
set vector = ns.Open ("CONTAINER000TEST=1", wbemConnectionFlagOpenVector _
		OR wbemConnectionFlagAllowNamespaceTraversal OR wbemConnectionFlagAllowMachineTraversal)

if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to open instance as vector"
else
	scriptHelper.writeToLog "Successful opening of instance as vector", 2
end if	


'Just to check we're in the right place, get our class
set newClass = vector.Get ("VECTOR001TEST")

if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to get class from dereferenced vector"
else
	scriptHelper.writeToLog "Successful retrieval of class from dereferenced vector: " & newClass.Path_.Path, 2
end if	


scriptHelper.writeToLog "<<<", 2
scriptHelper.writeToLog "<<< TestVectorOpen", 2
scriptHelper.writeToLog "<<<", 2

End Sub

</script>
</job>