You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
346 lines
8.3 KiB
346 lines
8.3 KiB
/********************************************************************
|
|
|
|
Copyright (c) 1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
ioutest.cpp
|
|
|
|
Abstract:
|
|
incident object unit test
|
|
|
|
Revision History:
|
|
DerekM created 07/14/99
|
|
|
|
********************************************************************/
|
|
|
|
#include <module.h>
|
|
|
|
#include <MPC_utils.h>
|
|
#include <MPC_com.h>
|
|
#include <MPC_streams.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include "HelpServiceTypeLib.h"
|
|
#include "HelpServiceTypeLib_i.c"
|
|
|
|
#include "HelpCenterTypeLib.h"
|
|
#include "HelpCenterTypeLib_i.c"
|
|
|
|
#include "hsi.h"
|
|
|
|
#include <initguid.h>
|
|
#include <msscript.h>
|
|
|
|
#include <incident.h>
|
|
|
|
|
|
// **************************************************************************
|
|
int __cdecl wmain(int argc, WCHAR **argv, WCHAR **envp)
|
|
{
|
|
CComObject<MPC::FileStream> *pfsHist = NULL;
|
|
CComObject<MPC::FileStream> *pfsSnap = NULL;
|
|
CComObject<CHSC> *phsc = NULL;
|
|
IDictionary *pDict = NULL;
|
|
CComObject<CSAFIncident> *pIO = NULL;
|
|
IDispatch *pdisp = NULL;
|
|
CComBSTR bstrFile;
|
|
CComBSTR bstr;
|
|
CComBSTR bstrVal, bstrKey;
|
|
VARIANT varVal, varKey;
|
|
|
|
|
|
VARIANT_BOOL fRCReq = VARIANT_TRUE;
|
|
VARIANT_BOOL fRCReqRet;
|
|
|
|
CComBSTR bstrRCTicket, bstrRCTicket1;
|
|
CComBSTR bstrStartPage, bstrStartPage1;
|
|
|
|
CComBSTR bstrXMLBlob;
|
|
|
|
|
|
HRESULT hr = NOERROR;
|
|
|
|
if (argc < 2)
|
|
{
|
|
printf("Usage: ioutest <save | load | getxml>\n\n");
|
|
return E_FAIL;
|
|
}
|
|
|
|
hr = CoInitialize(NULL);
|
|
if (FAILED(hr))
|
|
return hr;
|
|
|
|
hr = CComObject<CSAFIncident>::CreateInstance(&pIO);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
hr = CComObject<MPC::FileStream>::CreateInstance(&pfsHist);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
hr = CComObject<MPC::FileStream>::CreateInstance(&pfsSnap);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
pfsHist->AddRef();
|
|
pfsSnap->AddRef();
|
|
|
|
bstrFile = L"d:\\incident.xml";
|
|
|
|
hr = pIO->LoadFromXMLFile(bstrFile);
|
|
|
|
bstrXMLBlob = L"<?xml version=\"1.0\" encoding=\"Unicode\"?><UPLOADINFO TYPE=\"Bug\"><UPLOADDATA USERNAME=\"Rajesh\" PROBLEMDESCRIPTION=\"Test Description\" RCTICKET=\"1,nsoytest1,HelpAssistant,90!4SbO7NTfN4v,1,TSRDP0,ht^5GmLrR2SKwI,0\" RCREQUESTED=\"1\" RCENCRYPTED=\"1\" SALEMID=\"1,nsoytest1,HelpAssistant,90!4SbO7NTfN4v,1,TSRDP0,ht^5GmLrR2SKwI,0\"/></UPLOADINFO>";
|
|
|
|
hr = pIO->LoadFromXMLString(bstrXMLBlob);
|
|
|
|
/*
|
|
|
|
// Get the dictionary stuff
|
|
hr = pIO->get_Misc(&pdisp);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
hr = pdisp->QueryInterface(IID_IDictionary, (LPVOID *)&pDict);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
// Read the contents of the dictionary object here...
|
|
|
|
if(pDict)
|
|
{
|
|
VARIANT varKey;
|
|
VARIANT varValue;
|
|
|
|
VariantInit(&varKey);
|
|
VariantInit(&varValue);
|
|
|
|
V_VT(&varKey) = VT_BSTR;
|
|
V_BSTR(&varKey) = L"USERNAME";
|
|
hr = pDict->get_Item( &varKey, &varValue );
|
|
|
|
V_VT(&varKey) = VT_BSTR;
|
|
V_BSTR(&varKey) = L"PROBLEMDESCRIPTION";
|
|
hr = pDict->get_Item( &varKey, &varValue );
|
|
|
|
V_VT(&varKey) = VT_BSTR;
|
|
V_BSTR(&varKey) = L"SALEMID";
|
|
hr = pDict->get_Item( &varKey, &varValue );
|
|
|
|
}
|
|
*/
|
|
|
|
|
|
// add machine history stream
|
|
bstrFile = L"d:\\hist.xml";
|
|
hr = pfsHist->InitForRead( bstrFile );
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
hr = pIO->put_MachineHistory(pfsHist);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
// add machine snapshot stream
|
|
bstrFile = L"d:\\snap.xml";
|
|
hr = pfsSnap->InitForRead( bstrFile );
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
hr = pIO->put_MachineSnapshot(pfsSnap);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
// add problem description
|
|
bstr = L"It doesn't work at all";
|
|
hr = pIO->put_ProblemDescription(bstr);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
// add product name
|
|
bstr = L"NonFunctionality 1.0";
|
|
hr = pIO->put_ProductName(bstr);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
// add product id
|
|
bstr = L"NF10";
|
|
hr = pIO->put_ProductID(bstr);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
// add username
|
|
bstr = L"Jim Bob Robberts";
|
|
hr = pIO->put_UserName(bstr);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
// add upload type
|
|
hr = pIO->put_UploadType(eutBug);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
// add the dictionary stuff
|
|
hr = pIO->get_Misc(&pdisp);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
hr = pdisp->QueryInterface(IID_IDictionary, (LPVOID *)&pDict);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
VariantInit(&varKey);
|
|
VariantInit(&varVal);
|
|
V_VT(&varKey) = VT_BSTR;
|
|
V_VT(&varVal) = VT_BSTR;
|
|
|
|
bstrKey = L"Title";
|
|
bstrVal = L"Exploding windows";
|
|
V_BSTR(&varKey) = bstrKey.m_str;
|
|
V_BSTR(&varVal) = bstrVal.m_str;
|
|
hr = pDict->put_Item(&varKey, &varVal);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
bstrKey = L"Severity";
|
|
bstrVal = L"Really Bad";
|
|
V_BSTR(&varKey) = bstrKey.m_str;
|
|
V_BSTR(&varVal) = bstrVal.m_str;
|
|
hr = pDict->put_Item(&varKey, &varVal);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
bstrKey = L"Area";
|
|
bstrVal = L"Windows";
|
|
V_BSTR(&varKey) = bstrKey.m_str;
|
|
V_BSTR(&varVal) = bstrVal.m_str;
|
|
hr = pDict->put_Item(&varKey, &varVal);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
bstrKey = L"ExpectedResults";
|
|
bstrVal = L"It just works!";
|
|
V_BSTR(&varKey) = bstrKey.m_str;
|
|
V_BSTR(&varVal) = bstrVal.m_str;
|
|
hr = pDict->put_Item(&varKey, &varVal);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
bstrKey = L"ReproSteps";
|
|
bstrVal = L"Turn on computer. Watch it explode.";
|
|
V_BSTR(&varKey) = bstrKey.m_str;
|
|
V_BSTR(&varVal) = bstrVal.m_str;
|
|
hr = pDict->put_Item(&varKey, &varVal);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
// add the trace stuff
|
|
hr = CComObject<CHSC>::CreateInstance(&phsc);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
//hr = pIO->put_SelfHelpTrace(phsc);
|
|
//if (FAILED(hr))
|
|
//goto done;
|
|
|
|
// Add the new RC properties.
|
|
|
|
// add RCRequested
|
|
hr = pIO->put_RCRequested(fRCReq);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
hr = pIO->get_RCRequested(&fRCReqRet);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
// add RCTicketEncrypted
|
|
hr = pIO->put_RCTicketEncrypted(fRCReq);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
hr = pIO->get_RCTicketEncrypted(&fRCReqRet);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
|
|
bstrRCTicket = L"This is the RCTicket";
|
|
|
|
// Add RCTicket
|
|
hr = pIO->put_RCTicket(bstrRCTicket);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
hr = pIO->get_RCTicket(&bstrRCTicket1);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
// add startpage
|
|
bstrStartPage = L"http://startpage.htm";
|
|
|
|
hr = pIO->put_StartPage(bstrStartPage);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
hr = pIO->get_StartPage(&bstrStartPage1);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
|
|
// dump the output
|
|
switch(argv[1][0])
|
|
{
|
|
case 'L':
|
|
case 'l':
|
|
bstrFile = "d:\\out.sav";
|
|
hr = pIO->Load(bstrFile);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
bstrFile = "d:\\out.xml";
|
|
hr = pIO->GetXML(bstrFile);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
break;
|
|
|
|
case 'S':
|
|
case 's':
|
|
bstrFile = "d:\\out.sav";
|
|
hr = pIO->Save(bstrFile);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
break;
|
|
|
|
|
|
case 'G':
|
|
case 'g':
|
|
bstrFile = "d:\\out.xml";
|
|
hr = pIO->GetXML(bstrFile);
|
|
if (FAILED(hr))
|
|
goto done;
|
|
|
|
break;
|
|
|
|
default:
|
|
printf("Usage: ioutest <save | load | getxml>\n\n");
|
|
hr = E_INVALIDARG;
|
|
break;
|
|
}
|
|
|
|
|
|
done:
|
|
if (pfsHist != NULL)
|
|
pfsHist->Release();
|
|
if (pfsSnap != NULL)
|
|
pfsSnap->Release();
|
|
if (pDict != NULL)
|
|
pDict->Release();
|
|
if (pdisp != NULL)
|
|
pdisp->Release();
|
|
if (pIO != NULL)
|
|
pIO->Release();
|
|
CoUninitialize();
|
|
return hr;
|
|
}
|