<!-- 
******************************************************************
'
' put.wsf
'
' Purpose: test Put functionality
'
' Parameters: none
'
' Returns:	0	- success
'		1	- failure
'
'*****************************************************************
-->

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

on error resume next

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

dim l
dim nsDefault
dim nsCimv2
dim nsRemote

TestPreamble
TestCreation
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.SWbemLocator")
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 nsDefault = 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 class
set newClass = nsDefault.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 = "PUT000TEST"

' Add a key property (uint32)
set p0 = newClass.Properties_.Add ("p0", wbemCimtypeUint32)
p0.Qualifiers_.Add "key", true
 
if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to define class"
else
	scriptHelper.writeToLog "Successful definition of class", 2
end if	

' Save the class
set path = newClass.Put_

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

if path.Path <> "\\.\root\default:PUT000TEST" then
	scriptHelper.writeErrorToLog null, "Unexpected path returned"	
else
	scriptHelper.writeToLog "Path returned from class put is OK", 2
end if	

' Save the class in another namespace	
set nsCimv2 = l.ConnectServer (,"root\cimv2")

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

set path = nsCimv2.Put (newClass)

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

if path.Path <> "\\.\root\cimv2:PUT000TEST" then
	scriptHelper.writeErrorToLog null, "Unexpected path returned"	
else
	scriptHelper.writeToLog "Path returned from class put is OK", 2
end if	

' Save the class in a remote namespace	
set nsRemote = l.ConnectServer ("alanbos2", "root\default")

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

' Save the class in a remote namespace
set path = nsRemote.Put (newClass)

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

if path.Path <> "\\alanbos2\root\default:PUT000TEST" then
	scriptHelper.writeErrorToLog null, "Unexpected path returned"	
else
	scriptHelper.writeToLog "Path returned from class put is OK", 2
end if	


End Sub

'******************************************************************
'
' TestCreation
'
' Purpose: Check paths of new instances are OK
'
'*****************************************************************

Sub TestCreation

on error resume next

' Regular SpawnInstance

set myInstance = nsDefault.Get ("PUT000TEST").SpawnInstance_

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

myInstance.p0 = 1
set path = myInstance.Put_

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

if (0 = StrComp(path.Path, "\\.\root\default:PUT000TEST.p0=1", vbTextCompare)) Or _
   (0 = StrComp(path.Path, "\\alanbos4\root\default:PUT000TEST.p0=1", vbTextCompare)) then
	scriptHelper.writeToLog "Path returned on instance put to root\default is OK", 2
else
	scriptHelper.writeErrorToLog null, "Unexpected path returned on instance put to root\default"	
end if	

' Open an object
set myInstance = l.ConnectServer (,"root\cimv2").Get("PUT000TEST").SpawnInstance_

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

myInstance.p0 = 23
set path = myInstance.Put_

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

if (0 = StrComp(path.Path, "\\.\root\cimv2:PUT000TEST.p0=23", vbTextCompare)) Or _
   (0 = StrComp(path.Path, "\\alanbos4\root\cimv2:PUT000TEST.p0=23", vbTextCompare)) then
	scriptHelper.writeToLog "Path returned on instance put to \\.\root\cimv2 is OK", 2
else
	scriptHelper.writeErrorToLog null, "Unexpected path returned on instance put to \\.\root\cimv2 [" & path.Path & "]"	
end if	

' Save to a different namespace

set myInstance = nsRemote.Get("PUT000TEST").SpawnInstance_

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

myInstance.p0 = 77
set path = nsRemote.Put (myInstance)

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

if (0 = StrComp(path.Path, "\\alanbos2\root\default:PUT000TEST.p0=77", vbTextCompare)) then
	scriptHelper.writeToLog "Path returned on instance put to \\alanbos2\root\default is OK", 2
else
	scriptHelper.writeErrorToLog null, "Unexpected path returned on instance put to \\alanbos2\root\default [" & path.Path & "]"	
end if	


End Sub

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

Sub TestPostamble

on error resume next

' Clean up
nsDefault.Delete ("PUT000TEST")

if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to delete class in root\default"
else
	scriptHelper.writeToLog "Successful delete of class in root\default", 2
end if	

nsCimv2.Delete ("PUT000TEST")

if err <> 0 then 
	scriptHelper.writeErrorToLog err, "Failed to delete class in root\cimv2"
else
	scriptHelper.writeToLog "Successful delete of class in root\cimv2", 2
end if	

nsRemote.Delete ("PUT000TEST")

End Sub
</script>
</job>