public void MSOXORULE_S04_TC02_AddModifyDeleteExtendedRule_OnPublicFolder()
{
this.CheckMAPIHTTPTransportSupported();
#region TestUser1 logs on to the public folder.
RopOpenFolderResponse openFolderResponse;
RopLogonResponse logonResponse;
bool ret = this.OxoruleAdapter.Connect(ConnectionType.PublicFolderServer, this.User1Name, this.User1ESSDN, this.User1Password);
Site.Assert.IsTrue(ret, "connect to public folder server should be successful");
uint publicFolderLogonHandler = this.OxoruleAdapter.RopLogon(LogonType.PublicFolder, this.User1ESSDN, out logonResponse);
// Assert the client to log on to the public folder successfully.
Site.Assert.AreEqual<uint>(0, logonResponse.ReturnValue, "Logon the public folder should be successful.");
// Folder index 1 is the Interpersonal Messages subtree, and this is defined in MS-OXCSTOR.
uint publicfolderHandler = this.OxoruleAdapter.RopOpenFolder(publicFolderLogonHandler, logonResponse.FolderIds[1], out openFolderResponse);
// Get the store object's entry ID.
this.GetStoreObjectEntryID(StoreObjectType.PublicFolder, this.Server, this.User1ESSDN);
RopCreateFolderResponse createFolderResponse;
string newFolderName = Common.GenerateResourceName(this.Site, Constants.FolderDisplayName);
uint newFolderHandle = this.OxoruleAdapter.RopCreateFolder(publicfolderHandler, newFolderName, Constants.FolderComment, out createFolderResponse);
ulong newFolderID = createFolderResponse.FolderId;
Site.Assert.AreEqual<uint>(0, createFolderResponse.ReturnValue, "Creating folder operation should succeed.");
#endregion
#region TestUser1 creates an FAI message.
RopCreateMessageResponse ropCreateMessageResponse;
uint extendedRuleMessageHandle = this.OxoruleAdapter.RopCreateMessage(newFolderHandle, newFolderID, Convert.ToByte(true), out ropCreateMessageResponse);
Site.Assert.AreEqual<uint>(0, ropCreateMessageResponse.ReturnValue, "Creating the first FAI message should succeed.");
#endregion
#region TestUser1 adds the extended rule with NamedProperty successfully.
string ruleConditionSubjectNameForAdd = Constants.RuleConditionSubjectContainString;
NamedPropertyInfo namedPropertyInfo = new NamedPropertyInfo
{
NoOfNamedProps = 2,
PropId = new uint[2]
{
0x8001, 0x8002
}
};
PropertyName testPropertyName = new PropertyName
{
Guid = System.Guid.NewGuid().ToByteArray(),
Kind = 0x01,
Name = Encoding.Unicode.GetBytes(Constants.NameOfPropertyName + "\0")
};
// 0x01 means the property is identified by the name property.
testPropertyName.NameSize = (byte)testPropertyName.Name.Length;
PropertyName secondPropertyName = new PropertyName
{
Guid = System.Guid.NewGuid().ToByteArray(),
Kind = 0x00,
LID = 0x88888888
};
// 0x00 means the property is identified by the LID.
namedPropertyInfo.NamedProperty = new PropertyName[2] { testPropertyName, secondPropertyName };
namedPropertyInfo.NamedPropertiesSize = (uint)(testPropertyName.Serialize().Length + secondPropertyName.Serialize().Length);
string ruleName = Common.GenerateResourceName(this.Site, Constants.ExtendRulename1);
TaggedPropertyValue[] extendedRulePropertiesForAdd = AdapterHelper.GenerateExtendedRuleTestData(ruleName, 0, (uint)RuleState.ST_ENABLED, Constants.PidTagRuleProvider, ActionType.OP_MARK_AS_READ, new DeleteMarkReadActionData(), ruleConditionSubjectNameForAdd, namedPropertyInfo);
// Set properties for extended rule FAI message.
RopSetPropertiesResponse ropSetPropertiesResponse = this.OxoruleAdapter.RopSetProperties(extendedRuleMessageHandle, extendedRulePropertiesForAdd);
Site.Assert.AreEqual<uint>(0, ropSetPropertiesResponse.ReturnValue, "Setting property for Extended rule FAI message should succeed.");
// Save changes of message.
RopSaveChangesMessageResponse ropSaveChangesMessagResponse = this.OxoruleAdapter.RopSaveChangesMessage(extendedRuleMessageHandle);
Site.Assert.AreEqual<uint>(0, ropSaveChangesMessagResponse.ReturnValue, "Saving Extend rule message should succeed.");
// Specify the properties to be got.
PropertyTag[] propertyTagArray = new PropertyTag[1];
// PidTagRuleMessageProvider
propertyTagArray[0].PropertyId = (ushort)PropertyId.PidTagRuleMessageProvider;
propertyTagArray[0].PropertyType = (ushort)PropertyType.PtypString;
// Get the specific properties of the extended rule.
RopGetPropertiesSpecificResponse ropGetPropertiesSpecificResponse = this.OxoruleAdapter.RopGetPropertiesSpecific(extendedRuleMessageHandle, propertyTagArray);
Site.Assert.AreEqual<uint>(0, ropGetPropertiesSpecificResponse.ReturnValue, "Getting specific properties operation should succeed.");
string pidTagRuleMessageProviderData = AdapterHelper.PropertyValueConvertToString(ropGetPropertiesSpecificResponse.RowData.PropertyValues[0].Value);
Site.Assert.AreEqual<string>(Constants.PidTagRuleProvider, pidTagRuleMessageProviderData, "The rule provider data should be RuleOrganizer.");
#endregion
#region Modify the created rule.
ruleName = Common.GenerateResourceName(this.Site, Constants.ExtendRulename2);
TaggedPropertyValue[] extendedRulePropertiesForModify = AdapterHelper.GenerateExtendedRuleTestData(ruleName, 0, (uint)RuleState.ST_ENABLED, Constants.PidTagRuleProvider, ActionType.OP_MARK_AS_READ, new DeleteMarkReadActionData(), ruleConditionSubjectNameForAdd, namedPropertyInfo);
// Set properties for extended rule FAI message.
ropSetPropertiesResponse = this.OxoruleAdapter.RopSetProperties(extendedRuleMessageHandle, extendedRulePropertiesForModify);
Site.Assert.AreEqual<uint>(0, ropSetPropertiesResponse.ReturnValue, "Setting property for Extended rule FAI message should succeed.");
// Save changes of message.
ropSaveChangesMessagResponse = this.OxoruleAdapter.RopSaveChangesMessage(extendedRuleMessageHandle);
Site.Assert.AreEqual<uint>(0, ropSaveChangesMessagResponse.ReturnValue, "Saving Extend rule message should succeed.");
// PidTagSubject
propertyTagArray[0].PropertyId = (ushort)PropertyId.PidTagRuleMessageName;
propertyTagArray[0].PropertyType = (ushort)PropertyType.PtypString;
// Get the specific properties of the extended rule.
ropGetPropertiesSpecificResponse = this.OxoruleAdapter.RopGetPropertiesSpecific(extendedRuleMessageHandle, propertyTagArray);
Site.Assert.AreEqual<uint>(0, ropGetPropertiesSpecificResponse.ReturnValue, "Getting specific properties operation should succeed.");
string messageName = AdapterHelper.PropertyValueConvertToString(ropGetPropertiesSpecificResponse.RowData.PropertyValues[0].Value);
Site.Assert.AreEqual<string>(ruleName, messageName, "The rule subject should be {0}.", ruleName);
#endregion
#region Release the created message to delete the created rule.
this.OxoruleAdapter.ReleaseRop(extendedRuleMessageHandle);
// Get the specific properties of the extended rule.
ropGetPropertiesSpecificResponse = this.OxoruleAdapter.RopGetPropertiesSpecific(extendedRuleMessageHandle, propertyTagArray);
Site.Assert.IsNull(ropGetPropertiesSpecificResponse.RowData, "The property value of the extended rule should be null!");
#endregion
#region Delete the folder.
RopDeleteFolderResponse deleteFolder = this.OxoruleAdapter.RopDeleteFolder(publicfolderHandler, newFolderID);
Site.Assert.AreEqual<uint>(0, deleteFolder.ReturnValue, "Deleting folder should succeed.");
#endregion
}