public void MSONESTORE_S02_TC05_LoadOneNoteWithLargeReferences() { string fileName = Common.GetConfigurationPropertyValue("OneWithLarge", Site); OneNoteRevisionStoreFile file = this.Adapter.LoadOneNoteFile(fileName); int objectSpaceCount = file.RootFileNodeList.ObjectSpaceManifestList.Count; for (int i = 0; i < file.RootFileNodeList.ObjectSpaceManifestList.Count; i++) { ObjectSpaceManifestList objectSpace = file.RootFileNodeList.ObjectSpaceManifestList[i]; for (int j = 0; j < objectSpace.RevisionManifestList[0].ObjectGroupList.Count; j++) { ObjectGroupList objectGroupList = objectSpace.RevisionManifestList[0].ObjectGroupList[j]; FileNode[] fileNodes = objectGroupList.FileNodeSequence.Where(f => f.FileNodeID == FileNodeIDValues.ObjectDeclarationFileData3LargeRefCountFND).ToArray(); foreach (FileNode node in fileNodes) { ObjectDeclarationFileData3LargeRefCountFND fnd = node.fnd as ObjectDeclarationFileData3LargeRefCountFND; // Verify MS-ONESTORE requirement: MS-ONESTORE_R72 Site.CaptureRequirementIfIsTrue( (uint)node.FileNodeID == 0x073 && fnd.jcid.IsFileData == 1, 72, @"[In Object Space Object]If the value of the JCID.IsFileData field is ""true"" then the value of the FileNode.FileNodeID field MUST be [0x072 (ObjectDeclarationFileData3RefCountFND structure, section 2.5.27) or] 0x073 (ObjectDeclarationFileData3LargeRefCountFND structure, section 2.5.28)."); } } } }
public void MSONESTORE_S02_TC03_VerifyguildFile() { string fileName1 = Common.GetConfigurationPropertyValue("OnetocFileLocal", Site); OneNoteRevisionStoreFile file1 = this.Adapter.LoadOneNoteFile(fileName1); string fileName2 = Common.GetConfigurationPropertyValue("OneFileWithFileData", Site); OneNoteRevisionStoreFile file2 = this.Adapter.LoadOneNoteFile(fileName2); Site.CaptureRequirementIfIsTrue( file1.Header.guidFile != file2.Header.guidFile, 1421, @"[In Header] [guildFile]: The guidFile in two files is different."); string fileName3 = Common.GetConfigurationPropertyValue("NoSectionFile", Site); OneNoteRevisionStoreFile file3 = this.Adapter.LoadOneNoteFile(fileName3); // Verify MS-ONESTORE requirement: MS-ONESTORE_R263 Site.CaptureRequirementIfAreEqual <Guid>( System.Guid.Parse("{00000000-0000-0000-0000-000000000000}"), file3.Header.guidAncestor, 263, @"[In Header] If the GUID is ""{00000000-0000-0000-0000-000000000000}"", this field does not reference a table of contents file."); }
public void MSONESTORE_S02_TC04_LoadEncryptionFile() { string fileName = Common.GetConfigurationPropertyValue("OneFileEncryption", Site); OneNoteRevisionStoreFile file = this.Adapter.LoadOneNoteFile(fileName); foreach (ObjectSpaceManifestList objectSpaceManifestList in file.RootFileNodeList.ObjectSpaceManifestList) { foreach (RevisionManifestList revisionManifestList in objectSpaceManifestList.RevisionManifestList) { foreach (RevisionManifest revisionManifest in revisionManifestList.RevisionManifests) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R104 this.Site.CaptureRequirementIfIsTrue( revisionManifest.FileNodeSequence[1].FileNodeID == FileNodeIDValues.ObjectDataEncryptionKeyV2FNDX, 104, @"[In Revision Manifest] If the object space is encrypted, then the second FileNode in the sequence MUST be a FileNode structure with a FileNodeID equal to 0x07C (ObjectDataEncryptionKeyV2FNDX structure, section 2.5.19)."); // If R104 is verified,then R612 will be verified. // Verify MS-ONESTORE requirement: MS-ONESTORE_R612 this.Site.CaptureRequirement( 612, @"[In ObjectDataEncryptionKeyV2FNDX] If any revision manifest (section 2.1.9) for an object space contains this FileNode structure, all other revision manifests for this object space MUST contain this FileNode structure, and these FileNode structures MUST point to structures with identical encryption data."); } } } }
/// <summary> /// Load and parse the OneNote revision-based file. /// </summary> /// <returns>Return the instacne of OneNoteRevisionStoreFile.</returns> public OneNoteRevisionStoreFile LoadOneNoteFile(string fileName) { byte[] buffer = File.ReadAllBytes(fileName); OneNoteRevisionStoreFile oneNoteFile = new OneNoteRevisionStoreFile(); oneNoteFile.DoDeserializeFromByteArray(buffer); this.VerifyRevisionStoreFile(oneNoteFile, fileName, this.Site); return(oneNoteFile); }
/// <summary> /// Find the specific object group by object group ID. /// </summary> /// <param name="file">The instance of OneNoteRevisionStoreFile.</param> /// <param name="ObjectGroupId">The object group ID.</param> /// <returns>Returns the specify object group.</returns> private ObjectGroupList FindObjectGroup(OneNoteRevisionStoreFile file, ExGuid ObjectGroupId) { foreach (ObjectSpaceManifestList objSpaceManifest in file.RootFileNodeList.ObjectSpaceManifestList) { foreach (RevisionManifestList revManifestList in objSpaceManifest.RevisionManifestList) { for (int i = 0; i < revManifestList.RevisionManifests.Count; i++) { RevisionManifest revManifest = revManifestList.RevisionManifests[i]; ObjectGroupListReferenceFND objGroupListRef = revManifest.FileNodeSequence[1].fnd as ObjectGroupListReferenceFND; if (objGroupListRef.ObjectGroupID.Guid == ObjectGroupId.GUID && objGroupListRef.ObjectGroupID.N == ObjectGroupId.Value) { return(revManifestList.ObjectGroupList[i]); } } } } return(null); }
public void MSONESTORE_S02_TC01_LoadOneNoteFileWithFileData() { string fileName = Common.GetConfigurationPropertyValue("OneFileWithFileData", Site); OneNoteRevisionStoreFile file = this.Adapter.LoadOneNoteFile(fileName); for (int i = 0; i <= file.RootFileNodeList.FileNodeListFragments.Count - 1; i++) { bool isDifferent = file.RootFileNodeList.FileNodeListFragments[i].Header.FileNodeListID != file.RootFileNodeList.FileNodeListFragments[i].Header.nFragmentSequence; // Verify MS-ONESTORE requirement: MS-ONESTORE_R3911 Site.CaptureRequirementIfIsTrue( isDifferent, 3911, @"[In FileNodeListHeader] The pair of FileNodeListID and nFragmentSequence field in FileNodeListFragment structures in the file, is different."); } List <RevisionManifest> revisManifestList = new List <RevisionManifest>(); foreach (ObjectSpaceManifestList objSpaceManifestList in file.RootFileNodeList.ObjectSpaceManifestList) { foreach (RevisionManifestList revManifestList in objSpaceManifestList.RevisionManifestList) { revisManifestList.AddRange(revManifestList.RevisionManifests); } } List <ExtendedGUID> ridRevisionManifestStart6FND = new List <ExtendedGUID>(); List <ExtendedGUID> ridDependentRevisionManifestStart6FND = new List <ExtendedGUID>(); List <ExtendedGUID> ridRevisionManifestStart7FND = new List <ExtendedGUID>(); List <ExtendedGUID> ridDependentRevisionManifestStart7FND = new List <ExtendedGUID>(); List <uint> odcsDefault = new List <uint>(); for (int i = 0; i < revisManifestList.Count; i++) { for (int j = 0; j < revisManifestList[i].FileNodeSequence.Count; j++) { FileNode revision = revisManifestList[i].FileNodeSequence[j]; if (revision.FileNodeID == FileNodeIDValues.RevisionManifestStart6FND) { RevisionManifestStart6FND fnd = revision.fnd as RevisionManifestStart6FND; ridRevisionManifestStart6FND.Add(((RevisionManifestStart6FND)revision.fnd).rid); ridDependentRevisionManifestStart6FND.Add(((RevisionManifestStart6FND)revision.fnd).ridDependent); odcsDefault.Add(((RevisionManifestStart6FND)revision.fnd).odcsDefault); } if (revision.FileNodeID == FileNodeIDValues.RevisionManifestStart7FND) { RevisionManifestStart7FND fnd = revision.fnd as RevisionManifestStart7FND; ridRevisionManifestStart7FND.Add(((RevisionManifestStart7FND)revision.fnd).Base.rid); ridDependentRevisionManifestStart7FND.Add(((RevisionManifestStart7FND)revision.fnd).Base.ridDependent); } } } for (int i = 0; i < odcsDefault.Count - 1; i++) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R535 Site.CaptureRequirementIfAreEqual <uint>( odcsDefault[i], odcsDefault[i + 1], 535, @"[In RevisionManifestStart6FND] [odcsDefault] MUST specify the same type of data encoding as used in the dependency revision (section 2.1.8), if one was specified in the ridDependent field."); } ExtendedGUID zeroExtendGuid = new ExtendedGUID(); zeroExtendGuid.Guid = Guid.Empty; zeroExtendGuid.N = 0; for (int i = 0; i < ridRevisionManifestStart6FND.Count - 1; i++) { for (int j = i + 1; j < ridRevisionManifestStart6FND.Count; j++) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R52501 Site.CaptureRequirementIfAreNotEqual <ExtendedGUID>( ridRevisionManifestStart6FND[i], ridRevisionManifestStart6FND[j], 52501, @"[In RevisionManifestStart6FND] The rid of two RevisionManifestStart6FND in revision manifest list is different."); } if (ridDependentRevisionManifestStart6FND[i].Equals(zeroExtendGuid)) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R527 Site.CaptureRequirementIfAreNotEqual <ExtendedGUID>( zeroExtendGuid, ridRevisionManifestStart6FND[i], 527, @"[In RevisionManifestStart6FND] [ridDependent] If the value is ""{ { 00000000 - 0000 - 0000 - 0000 - 000000000000}, 0} "", then this revision manifest has no dependency revision. "); } else { if (!ridDependentRevisionManifestStart6FND[i + 1].Equals(zeroExtendGuid)) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R528 Site.CaptureRequirementIfAreEqual <ExtendedGUID>( ridRevisionManifestStart6FND[i], ridDependentRevisionManifestStart6FND[i + 1], 528, @"[In RevisionManifestStart6FND] [ridDependent] Otherwise[If the value is not ""{ { 00000000 - 0000 - 0000 - 0000 - 000000000000}, 0} ""], this value MUST be equal to the RevisionManifestStart6FND.rid field [or the RevisionManifestStart7FND.base.rid field] of a previous revision manifest within this revision manifest list."); } } } for (int i = 0; i < ridRevisionManifestStart7FND.Count - 1; i++) { for (int j = i + 1; j < ridRevisionManifestStart7FND.Count; j++) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R52502 Site.CaptureRequirementIfAreNotEqual <ExtendedGUID>( ridRevisionManifestStart7FND[i], ridRevisionManifestStart7FND[i + 1], 52502, @"[In RevisionManifestStart6FND] The rid of two RevisionManifestStart7FND in revision manifest list is different."); } if (!ridDependentRevisionManifestStart7FND[i].Equals(zeroExtendGuid) && !ridDependentRevisionManifestStart7FND[i + 1].Equals(zeroExtendGuid)) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R52801 Site.CaptureRequirementIfAreEqual <ExtendedGUID>( ridRevisionManifestStart7FND[i], ridDependentRevisionManifestStart7FND[i + 1], 52801, @"[In RevisionManifestStart6FND] [ridDependent] Otherwise[If the value is not ""{ { 00000000 - 0000 - 0000 - 0000 - 000000000000}, 0} ""], this value MUST be equal to [the RevisionManifestStart6FND.rid field or] the RevisionManifestStart7FND.base.rid field of a previous revision manifest within this revision manifest list."); } } foreach (ObjectSpaceManifestList objectSpaceManifestList in file.RootFileNodeList.ObjectSpaceManifestList) { foreach (RevisionManifestList revisionManifestList in objectSpaceManifestList.RevisionManifestList) { if (revisionManifestList.FileNodeListFragments.Count > 1) { for (int i = 0; i < revisionManifestList.FileNodeListFragments.Count - 1; i++) { for (int j = i + 1; j < revisionManifestList.FileNodeListFragments.Count; j++) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R366 Site.CaptureRequirementIfAreEqual <uint>( revisionManifestList.FileNodeListFragments[i].Header.FileNodeListID, revisionManifestList.FileNodeListFragments[j].Header.FileNodeListID, 366, @"[In FileNodeListFragment] All fragments in the same file node list MUST have the same FileNodeListFragment.header.FileNodeListID field."); } } } foreach (FileNodeListFragment fileNodeListFragment in revisionManifestList.FileNodeListFragments) { FileChunkReference64x32 nextFragment = fileNodeListFragment.nextFragment; if ((uint)fileNodeListFragment.rgFileNodes[fileNodeListFragment.rgFileNodes.Count - 1].FileNodeID == 0xFF) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R373 Site.CaptureRequirementIfIsInstanceOfType( nextFragment, typeof(FileChunkReference64x32), 373, @"[In FileNodeListFragment] [rgFileNodes If a ChunkTerminatorFND structure is present, the value of the nextFragment field MUST be a valid FileChunkReference64x32 structure (section 2.2.4.4) to the next FileNodeListFragment structure."); } if (nextFragment == revisionManifestList.FileNodeListFragments[revisionManifestList.FileNodeListFragments.Count - 1].nextFragment) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R379 Site.CaptureRequirementIfIsTrue( nextFragment.IsfcrNil(), 379, @"[In FileNodeListFragment] If this is the last fragment, the value of the nextFragment field MUST be ""fcrNil"" (see section 2.2.4). "); } else { // Verify MS-ONESTORE requirement: MS-ONESTORE_R380 Site.CaptureRequirementIfIsFalse( nextFragment.IsfcrZero() || nextFragment.IsfcrNil(), 380, @"[In FileNodeListFragment] Otherwise [If this is not the last fragment] the value of the nextFragment.stp field MUST specify the location of a valid FileNodeListFragment structure, and the value of the nextFragment.cb field MUST be equal to the size of the referenced fragment including the FileNodeListFragment.header field and the FileNodeListFragment.footer field."); } } } } bool isFileNode = false; foreach (FileNode fileDataStoreList in file.RootFileNodeList.FileDataStoreListReference) { FileDataStoreListReferenceFND fnd = fileDataStoreList.fnd as FileDataStoreListReferenceFND; for (int i = 0; i < fnd.fileNodeListFragment.rgFileNodes.Count - 1; i++) { for (int j = i + 1; j < fnd.fileNodeListFragment.rgFileNodes.Count; j++) { FileDataStoreObjectReferenceFND objfnd1 = fnd.fileNodeListFragment.rgFileNodes[i].fnd as FileDataStoreObjectReferenceFND; FileDataStoreObjectReferenceFND objfnd2 = fnd.fileNodeListFragment.rgFileNodes[j].fnd as FileDataStoreObjectReferenceFND; // Verify MS-ONESTORE requirement: MS-ONESTORE_R63701 Site.CaptureRequirementIfAreNotEqual <Guid>( objfnd1.guidReference, objfnd2.guidReference, 63701, @"[In FileDataStoreObjectReferenceFND] The guidReference is different for two FileDataStoreObjectReferenceFND structures."); } } isFileNode = true; for (int k = 0; k < fnd.fileNodeListFragment.rgFileNodes.Count; k++) { FileNode fileNode = fnd.fileNodeListFragment.rgFileNodes[k]; if ((uint)fileNode.FileNodeID != 0x094) { isFileNode = false; break; } // Verify MS-ONESTORE requirement: MS-ONESTORE_R628 Site.CaptureRequirementIfIsTrue( isFileNode, 628, @"[In FileDataStoreListReferenceFND] The referenced file node list MUST contain only FileNode structures with a FileNodeID field value equal to 00x094 (FileDataStoreObjectReferenceFND structure). "); //If MS-ONESTORE_R628 is verified successfully and according to the definition of FileDataStoreObjectReferenceFND, MS-ONESTORE_R33 can be verified directlly. //Verify MS-ONESTORE requirement: MS-ONESTORE_R633 Site.CaptureRequirement( 633, @"[[In FileDataStoreObjectReferenceFND] All such FileNode structures MUST be contained in the file node list (section 2.4) specified by a FileDataStoreListReferenceFND structure (section 2.5.21)."); } } int objectSpaceCount = file.RootFileNodeList.ObjectSpaceManifestList.Count; for (int i = 0; i < file.RootFileNodeList.ObjectSpaceManifestList.Count; i++) { ObjectSpaceManifestList objectSpace = file.RootFileNodeList.ObjectSpaceManifestList[i]; for (int j = 0; j < objectSpace.RevisionManifestList[0].ObjectGroupList.Count; j++) { ObjectGroupList objectGroupList = objectSpace.RevisionManifestList[0].ObjectGroupList[j]; FileNode[] fileNodes = objectGroupList.FileNodeSequence.Where(f => f.FileNodeID == FileNodeIDValues.ReadOnlyObjectDeclaration2RefCountFND).ToArray(); foreach (FileNode node in fileNodes) { ReadOnlyObjectDeclaration2RefCountFND fnd = node.fnd as ReadOnlyObjectDeclaration2RefCountFND; // Verify MS-ONESTORE requirement: MS-ONESTORE_R68 Site.CaptureRequirementIfIsTrue( (uint)node.FileNodeID == 0x0C4 && fnd.Base.body.jcid.IsReadOnly == 1, 68, @"[In Object Space Object] If the value of the JCID.IsReadOnly field is ""true"" then the value of the FileNode.FileNodeID field MUST be 0x0C4 (ReadOnlyObjectDeclaration2RefCountFND structure, section 2.5.29) [or 0x0C5 (ReadOnlyObjectDeclaration2LargeRefCountFND structure, section 2.5.30).]"); // Verify MS-ONESTORE requirement: MS-ONESTORE_R703 Site.CaptureRequirementIfIsNotNull( fnd.Base, 703, @"[In ReadOnlyObjectDeclaration2RefCountFND] If this object is revised, all declarations of this object MUST specify identical data. "); } fileNodes = objectGroupList.FileNodeSequence.Where(f => f.FileNodeID == FileNodeIDValues.ObjectDeclarationFileData3RefCountFND).ToArray(); foreach (FileNode node in fileNodes) { ObjectDeclarationFileData3RefCountFND fnd = node.fnd as ObjectDeclarationFileData3RefCountFND; // Verify MS-ONESTORE requirement: MS-ONESTORE_R71 Site.CaptureRequirementIfIsTrue( (uint)node.FileNodeID == 0x072 && fnd.jcid.IsFileData == 1, 71, @"[In Object Space Object]If the value of the JCID.IsFileData field is ""true"" then the value of the FileNode.FileNodeID field MUST be 0x072 (ObjectDeclarationFileData3RefCountFND structure, section 2.5.27) [or 0x073 (ObjectDeclarationFileData3LargeRefCountFND structure, section 2.5.28). ]"); } fileNodes = objectGroupList.FileNodeSequence.Where(f => f.FileNodeID == FileNodeIDValues.ReadOnlyObjectDeclaration2LargeRefCountFND).ToArray(); foreach (FileNode node in fileNodes) { ReadOnlyObjectDeclaration2LargeRefCountFND fnd = node.fnd as ReadOnlyObjectDeclaration2LargeRefCountFND; // Verify MS-ONESTORE requirement: MS-ONESTORE_R710 Site.CaptureRequirementIfIsNotNull( fnd.Base, 710, @"[In ReadOnlyObjectDeclaration2LargeRefCountFND] If this object is revised, all declarations of this object MUST specify identical data. "); } fileNodes = objectGroupList.FileNodeSequence.Where(f => f.FileNodeID == FileNodeIDValues.DataSignatureGroupDefinitionFND).ToArray(); List <ExtendedGUID> dataSignatureGroupdefinitionFND = new List <ExtendedGUID>(); for (int k = 0; k < fileNodes.Length - 1; k++) { DataSignatureGroupDefinitionFND fnd = fileNodes[k].fnd as DataSignatureGroupDefinitionFND; if (!fnd.DataSignatureGroup.Equals(zeroExtendGuid)) { dataSignatureGroupdefinitionFND.Add(fnd.DataSignatureGroup); } } for (int k = 0; k < dataSignatureGroupdefinitionFND.Count - 1; k++) { for (int h = k + 1; h < dataSignatureGroupdefinitionFND.Count; h++) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R72701 Site.CaptureRequirementIfAreEqual <ExtendedGUID>( dataSignatureGroupdefinitionFND[k], dataSignatureGroupdefinitionFND[h], 72701, @"[In DataSignatureGroupDefinitionFND] DataSignatureGroup (20 bytes):All declarations of an object (section 2.1.5) with the same identity and the same DataSignatureGroup field not equal to {{00000000-0000-0000-0000-000000000000}, 0} MUST have the same data."); } } } } }
public void MSONESTORE_S02_TC02_LoadOnetocFile() { string fileName = Common.GetConfigurationPropertyValue("OnetocFileLocal", Site); OneNoteRevisionStoreFile file = this.Adapter.LoadOneNoteFile(fileName); List <RevisionManifest> revisionManifestList = new List <RevisionManifest>(); foreach (ObjectSpaceManifestList objSpaceManifestList in file.RootFileNodeList.ObjectSpaceManifestList) { foreach (RevisionManifestList revManifestList in objSpaceManifestList.RevisionManifestList) { revisionManifestList.AddRange(revManifestList.RevisionManifests); } } List <ExtendedGUID> ridRevisionManifestStart4FND = new List <ExtendedGUID>(); List <ExtendedGUID> ridDependentRevisionManifestStart4FND = new List <ExtendedGUID>(); for (int i = 0; i < revisionManifestList.Count; i++) { List <uint> ridGlobalIdTableEntryFNDX = new List <uint>(); List <uint> ridGlobalIdTableEntry2FNDX = new List <uint>(); List <uint> ridGlobalIdTableEntry3FNDX = new List <uint>(); for (int j = 0; j < revisionManifestList[i].FileNodeSequence.Count; j++) { FileNode revision = revisionManifestList[i].FileNodeSequence[j]; if (revision.FileNodeID == FileNodeIDValues.RevisionManifestStart4FND) { RevisionManifestStart4FND fnd = revision.fnd as RevisionManifestStart4FND; ridRevisionManifestStart4FND.Add(((RevisionManifestStart4FND)revision.fnd).rid); ridDependentRevisionManifestStart4FND.Add(((RevisionManifestStart4FND)revision.fnd).ridDependent); } if (revision.FileNodeID == FileNodeIDValues.GlobalIdTableEntryFNDX) { GlobalIdTableEntryFNDX fnd = revision.fnd as GlobalIdTableEntryFNDX; ridGlobalIdTableEntryFNDX.Add(((GlobalIdTableEntryFNDX)revision.fnd).index); } if (revision.FileNodeID == FileNodeIDValues.GlobalIdTableEntry2FNDX) { GlobalIdTableEntry2FNDX fnd = revision.fnd as GlobalIdTableEntry2FNDX; ridGlobalIdTableEntry2FNDX.Add(((GlobalIdTableEntry2FNDX)revision.fnd).iIndexMapTo); } if (revision.FileNodeID == FileNodeIDValues.GlobalIdTableEntry3FNDX) { GlobalIdTableEntry3FNDX fnd = revision.fnd as GlobalIdTableEntry3FNDX; ridGlobalIdTableEntry3FNDX.Add(((GlobalIdTableEntry3FNDX)revision.fnd).iIndexCopyToStart); } if (revision.FileNodeID == FileNodeIDValues.ObjectInfoDependencyOverridesFND) { ObjectInfoDependencyOverridesFND fnd = revision.fnd as ObjectInfoDependencyOverridesFND; if (fnd.Ref.IsfcrNil()) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R620 Site.CaptureRequirementIfIsNotNull( fnd.data, 620, @"[In ObjectInfoDependencyOverridesFND] otherwise [if the value of the ref field is ""fcrNil""], the override data is specified by the data field. "); } } } for (int j = 0; j < ridGlobalIdTableEntryFNDX.Count - 1; j++) { for (int k = j + 1; k < ridGlobalIdTableEntryFNDX.Count; k++) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R54901 Site.CaptureRequirementIfAreNotEqual <uint>( ridGlobalIdTableEntryFNDX[j], ridGlobalIdTableEntryFNDX[k], 54901, @"[In GlobalIdTableEntryFNDX] The indexes in two global identification table specified by FileNode structures with the values of the FileNode.FileNodeID fields equal to 0x024 (GlobalIdTableEntryFNDX structure), 0x25 (GlobalIdTableEntry2FNDX structure), and 0x26 (GlobalIdTableEntry3FNDX structure) are different."); } } for (int j = 0; j < ridGlobalIdTableEntry2FNDX.Count - 1; j++) { for (int k = j + 1; k < ridGlobalIdTableEntry2FNDX.Count; k++) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R55901 Site.CaptureRequirementIfAreNotEqual <uint>( ridGlobalIdTableEntry2FNDX[j], ridGlobalIdTableEntry2FNDX[k], 55901, @"[In GlobalIdTableEntry2FNDX] The iIndexMapTo is defferent in two global identification table specified by FileNode structures with the value of the FileNode.FileNodeID field equal to 0x024 (GlobalIdTableEntryFNDX structure), 0x25 (GlobalIdTableEntry2FNDX structure), and 0x26 (GlobalIdTableEntry3FNDX structure)."); } } for (int j = 0; j < ridGlobalIdTableEntry3FNDX.Count - 1; j++) { for (int k = j + 1; k < ridGlobalIdTableEntry3FNDX.Count; k++) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R57001 Site.CaptureRequirementIfAreNotEqual <uint>( ridGlobalIdTableEntry3FNDX[j], ridGlobalIdTableEntry3FNDX[k], 57001, @"[In GlobalIdTableEntry3FNDX] The indices from the value of iIndexCopyToStart to the value of (iIndexCopyToStart + cEntriesToCopy – 1) are different in two global identification table specified by FileNode structures with the values of the FileNode.FileNodeID field equal to 0x024 (GlobalIdTableEntryFNDX structure), 0x025 (GlobalIdTableEntry2FNDX structure), and 0x026 (GlobalIdTableEntry3FNDX structure)."); } } } for (int i = 0; i < ridRevisionManifestStart4FND.Count - 1; i++) { for (int j = i + 1; j < ridRevisionManifestStart4FND.Count; j++) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R51401 Site.CaptureRequirementIfAreNotEqual <ExtendedGUID>( ridRevisionManifestStart4FND[i], ridRevisionManifestStart4FND[j], 51401, @"[In RevisionManifestStart4FND] The rid of two RevisionManifestStart4FND in revision manifest list is different"); } ExtendedGUID zeroExtendGuid = new ExtendedGUID(); zeroExtendGuid.Guid = Guid.Empty; zeroExtendGuid.N = 0; // Verify MS-ONESTORE requirement: MS-ONESTORE_R516 Site.CaptureRequirementIfAreNotEqual <ExtendedGUID>( zeroExtendGuid, ridRevisionManifestStart4FND[i], 516, @"[In RevisionManifestStart4FND] [ridDependent] If the value is ""{ { 00000000 - 0000 - 0000 - 0000 - 000000000000}, 0} "", then this revision manifest has no dependency revision. "); if (!ridDependentRevisionManifestStart4FND[i].Equals(zeroExtendGuid)) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R517 Site.CaptureRequirementIfAreEqual <ExtendedGUID>( ridRevisionManifestStart4FND[i - 1], ridDependentRevisionManifestStart4FND[i], 517, @"[In RevisionManifestStart4FND] [ridDependent] Otherwise [If the value is not ""{ { 00000000 - 0000 - 0000 - 0000 - 000000000000}, 0} ""], this value MUST be equal to the RevisionManifestStart4FND.rid field of a previous revision manifest within this (section 2.1.9) revision manifest list."); } } }
public void MSONESTORE_S01_TC01_QueryOneFileContainsFileData() { // Get the resource url that contains the file data. string resourceName = Common.GetConfigurationPropertyValue("OneFileWithFileData", Site); string url = this.GetResourceUrl(resourceName); this.InitializeContext(url, this.UserName, this.Password, this.Domain); // Call QueryChange to get the data that is specified by above step. CellSubRequestType cellSubRequest = this.CreateCellSubRequestEmbeddedQueryChanges(SequenceNumberGenerator.GetCurrentSerialNumber()); CellStorageResponse cellStorageResponse = this.SharedAdapter.CellStorageRequest(url, new SubRequestType[] { cellSubRequest }); MSOneStorePackage package = this.ConvertOneStorePackage(cellStorageResponse); // Call adapter to load same file in local. OneNoteRevisionStoreFile file = this.Adapter.LoadOneNoteFile(resourceName); int objectSpaceCount = file.RootFileNodeList.ObjectSpaceManifestList.Count; List <FileNode> fileData3Refs = new List <FileNode>(); for (int i = 0; i < file.RootFileNodeList.ObjectSpaceManifestList.Count; i++) { ObjectSpaceManifestList objectSpace = file.RootFileNodeList.ObjectSpaceManifestList[i]; for (int j = 0; j < objectSpace.RevisionManifestList[0].ObjectGroupList.Count; j++) { ObjectGroupList objectGroupList = objectSpace.RevisionManifestList[0].ObjectGroupList[j]; fileData3Refs.AddRange(objectGroupList.FileNodeSequence.Where(f => f.FileNodeID == FileNodeIDValues.ObjectDeclarationFileData3RefCountFND).ToArray()); } } #region Capture code for Revisions ExGuid rootObjectId = package.DataRoot[0].ObjectGroupID; RevisionManifestDataElementData rootRevision = package.RevisionManifests[0]; // Verify MS-ONESTORE requirement: MS-ONESTORE_R933 Site.CaptureRequirementIfAreEqual <ExGuid>( rootObjectId, rootRevision.RevisionManifestObjectGroupReferencesList[0].ObjectGroupExtendedGUID, 933, @"[In Revisions] The Object Extended GUID field in the Revision Manifest Data Element structure MUST be equal to the identity of the corresponding root object in the revision in the revision store."); #endregion #region Capture code for Objects List <RevisionStoreObject> objectsWithFileData = new List <RevisionStoreObject>(); foreach (RevisionStoreObjectGroup objGroup in package.DataRoot) { objectsWithFileData.AddRange(objGroup.Objects.Where(o => o.FileDataObject != null).ToArray()); } foreach (RevisionStoreObjectGroup objGroup in package.OtherFileNodeList) { objectsWithFileData.AddRange(objGroup.Objects.Where(o => o.FileDataObject != null).ToArray()); } string subResponseBase64 = cellStorageResponse.ResponseCollection.Response[0].SubResponse[0].SubResponseData.Text[0]; byte[] subResponseBinary = Convert.FromBase64String(subResponseBase64); FsshttpbResponse fsshttpbResponse = FsshttpbResponse.DeserializeResponseFromByteArray(subResponseBinary, 0); DataElement[] objectBlOBElements = fsshttpbResponse.DataElementPackage.DataElements.Where(d => d.DataElementType == DataElementType.ObjectDataBLOBDataElementData).ToArray(); foreach (RevisionStoreObject obj in objectsWithFileData) { Guid fileDataObjectGuid = this.GetFileDataObjectGUID(obj); string extension = this.GetFileDataObjectExtension(obj); bool isFoundBLOB = objectBlOBElements.Where(b => b.DataElementExtendedGUID.Equals(obj.FileDataObject.ObjectDataBLOBReference.BLOBExtendedGUID)).ToArray().Length > 0; // Verify MS-ONESTORE requirement: MS-ONESTORE_R948 Site.CaptureRequirementIfIsTrue( isFoundBLOB && obj.FileDataObject.ObjectDataBLOBDeclaration.ObjectPartitionID.DecodedValue == 2, 948, @"[In Objects] Object Data BLOB Declaration.PartitionID: 2 (File Data) and Object Data BLOB Reference. BLOB Extended GUID: MUST have a reference to an Object Data BLOB Data Element structure, as specified in [MS-FSSHTTPB] section 2.2.1.12.8, used to transmit the data of the file data object."); foreach (FileNode fn in fileData3Refs) { ObjectDeclarationFileData3RefCountFND fnd = fn.fnd as ObjectDeclarationFileData3RefCountFND; if (fnd.FileDataReference.StringData.ToLower().Contains(fileDataObjectGuid.ToString().ToLower())) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R951 Site.CaptureRequirementIfIsTrue( fnd.FileDataReference.StringData.StartsWith("<invfdo>") == false, 951, @"[In Objects] This property MUST be set only if the prefix specified by the ObjectDeclarationFileData3RefCountFND.FileDataReference field (section 2.5.27) [or ObjectDeclarationFileData3LargeRefCountFND.FileDataReference field (section 2.5.28)] is not <invfdo>."); Site.CaptureRequirementIfAreEqual <string>( fnd.Extension.StringData, extension, 958, @"[In Objects] MUST be the value specified by the ObjectDeclarationFileData3RefCountFND.Extension field [or the ObjectDeclarationFileData3LargeRefCountFND.Extension] field."); break; } } } #endregion }
public void MSONESTORE_S01_TC04_QueryOneFileWithLargeReferences() { // Get the resource url that contains the file data. string resourceName = Common.GetConfigurationPropertyValue("OneWithLarge", Site); string url = this.GetResourceUrl(resourceName); this.InitializeContext(url, this.UserName, this.Password, this.Domain); // Call QueryChange to get the data that is specified by above step. CellSubRequestType cellSubRequest = this.CreateCellSubRequestEmbeddedQueryChanges(SequenceNumberGenerator.GetCurrentSerialNumber()); CellStorageResponse cellStorageResponse = this.SharedAdapter.CellStorageRequest(url, new SubRequestType[] { cellSubRequest }); MSOneStorePackage package = this.ConvertOneStorePackage(cellStorageResponse); // Call adapter to load same file in local. OneNoteRevisionStoreFile file = this.Adapter.LoadOneNoteFile(resourceName); int objectSpaceCount = file.RootFileNodeList.ObjectSpaceManifestList.Count; List <FileNode> fileData3LargeRefs = new List <FileNode>(); for (int i = 0; i < file.RootFileNodeList.ObjectSpaceManifestList.Count; i++) { ObjectSpaceManifestList objectSpace = file.RootFileNodeList.ObjectSpaceManifestList[i]; for (int j = 0; j < objectSpace.RevisionManifestList[0].ObjectGroupList.Count; j++) { ObjectGroupList objectGroupList = objectSpace.RevisionManifestList[0].ObjectGroupList[j]; fileData3LargeRefs.AddRange(objectGroupList.FileNodeSequence.Where(f => f.FileNodeID == FileNodeIDValues.ObjectDeclarationFileData3LargeRefCountFND).ToArray()); } } List <RevisionStoreObject> objectsWithFileData = new List <RevisionStoreObject>(); foreach (RevisionStoreObjectGroup objGroup in package.DataRoot) { objectsWithFileData.AddRange(objGroup.Objects.Where(o => o.FileDataObject != null).ToArray()); } foreach (RevisionStoreObjectGroup objGroup in package.OtherFileNodeList) { objectsWithFileData.AddRange(objGroup.Objects.Where(o => o.FileDataObject != null).ToArray()); } foreach (RevisionStoreObject obj in objectsWithFileData) { Guid fileDataObjectGuid = this.GetFileDataObjectGUID(obj); string extension = this.GetFileDataObjectExtension(obj); if (extension.ToLower().Contains("xps")) { foreach (FileNode fnode in fileData3LargeRefs) { ObjectDeclarationFileData3LargeRefCountFND fnd = fnode.fnd as ObjectDeclarationFileData3LargeRefCountFND; if (fnd.FileDataReference.StringData.ToLower().Contains(fileDataObjectGuid.ToString().ToLower())) { // Verify MS-ONESTORE requirement: MS-ONESTORE_R952 Site.CaptureRequirementIfIsTrue( fnd.FileDataReference.StringData.StartsWith("<invfdo>") == false, 952, @"[In Objects] This property MUST be set only if the prefix specified by the [ObjectDeclarationFileData3RefCountFND.FileDataReference field (section 2.5.27) or] ObjectDeclarationFileData3LargeRefCountFND.FileDataReference field (section 2.5.28) is not <invfdo>."); // Verify MS-ONESTORE requirement: MS-ONESTORE_R959 Site.CaptureRequirementIfAreEqual <string>( fnd.Extension.StringData, extension, 959, @"[In Objects] MUST be the value specified by the [ObjectDeclarationFileData3RefCountFND.Extension field or] the ObjectDeclarationFileData3LargeRefCountFND.Extension field."); break; } } } } }
public void MSONESTORE_S01_TC03_QueryOneFileWithoutFileData() { // Get the resource url that contains the file data. string resourceName = Common.GetConfigurationPropertyValue("OneFileWithoutFileData", Site); string url = this.GetResourceUrl(resourceName); this.InitializeContext(url, this.UserName, this.Password, this.Domain); // Call QueryChange to get the data that is specified by above step. CellSubRequestType cellSubRequest = this.CreateCellSubRequestEmbeddedQueryChanges(SequenceNumberGenerator.GetCurrentSerialNumber()); CellStorageResponse cellStorageResponse = this.SharedAdapter.CellStorageRequest(url, new SubRequestType[] { cellSubRequest }); MSOneStorePackage package = this.ConvertOneStorePackage(cellStorageResponse); // Call adapter to load same file in local. OneNoteRevisionStoreFile file = this.Adapter.LoadOneNoteFile(resourceName); #region Capture code for Header Cell for (int i = 0; i < package.HeaderCell.ObjectData.Body.RgPrids.Length; i++) { PropertyID propId = package.HeaderCell.ObjectData.Body.RgPrids[i]; if (propId.Value == 0x14001D93) { FourBytesOfData crcData = package.HeaderCell.ObjectData.Body.RgData[i] as FourBytesOfData; // Verify MS-ONESTORE requirement: MS-ONESTORE_R917 Site.CaptureRequirementIfAreEqual <uint>( file.Header.crcName, BitConverter.ToUInt32(crcData.Data, 0), 917, @"[In Header Cell] FileNameCRC's PropertyID 0x14001D93 with value: MUST be the Header.crcName field."); } else if (propId.Value == 0x1C001D94) { PrtFourBytesOfLengthFollowedByData guidFileData = package.HeaderCell.ObjectData.Body.RgData[i] as PrtFourBytesOfLengthFollowedByData; // Verify MS-ONESTORE requirement: MS-ONESTORE_R912 Site.CaptureRequirementIfAreEqual <Guid>( file.Header.guidFile, new Guid(guidFileData.Data), 912, @"[In Header Cell] [FileIdentityGuid] MUST be the value specified by the Header.guidFile field."); } else if (propId.Value == 0x1C001D95) { PrtFourBytesOfLengthFollowedByData guidAncestorData = package.HeaderCell.ObjectData.Body.RgData[i] as PrtFourBytesOfLengthFollowedByData; // Verify MS-ONESTORE requirement: MS-ONESTORE_R914 Site.CaptureRequirementIfAreEqual <Guid>( file.Header.guidAncestor, new Guid(guidAncestorData.Data), 914, @"[In Header Cell] [FileAncestorIdentityGuid] MUST be the value specified by the Header.guidAncestor field."); } } #endregion #region Capture code for Revision List <RevisionManifest> revisionManifestList = new List <RevisionManifest>(); foreach (ObjectSpaceManifestList objSpaceManifestList in file.RootFileNodeList.ObjectSpaceManifestList) { foreach (RevisionManifestList revManifestList in objSpaceManifestList.RevisionManifestList) { revisionManifestList.AddRange(revManifestList.RevisionManifests); } } foreach (RevisionManifestDataElementData revisionManifestData in package.RevisionManifests) { ExGuid revisionId = revisionManifestData.RevisionManifest.RevisionID; ExGuid baseRevisionId = revisionManifestData.RevisionManifest.BaseRevisionID; ExtendedGUID rid = null; ExtendedGUID ridDependent = null; bool isFound = false; for (int i = 0; i < revisionManifestList.Count; i++) { FileNode revisionStart = revisionManifestList[i].FileNodeSequence[0]; if (revisionStart.FileNodeID == FileNodeIDValues.RevisionManifestStart6FND) { rid = ((RevisionManifestStart6FND)revisionStart.fnd).rid; ridDependent = ((RevisionManifestStart6FND)revisionStart.fnd).ridDependent; } else if (revisionStart.FileNodeID == FileNodeIDValues.RevisionManifestStart7FND) { rid = ((RevisionManifestStart7FND)revisionStart.fnd).Base.rid; ridDependent = ((RevisionManifestStart7FND)revisionStart.fnd).Base.ridDependent; } if (rid.Guid == revisionId.GUID && rid.N == revisionId.Value) { isFound = true; break; } } // Verify MS-ONESTORE requirement: MS-ONESTORE_R925 Site.CaptureRequirementIfIsTrue( isFound, 925, @"[In Revisions] § Revision ID: MUST be equal to the revision store file revision identifier (section 2.1.8)."); // Verify MS-ONESTORE requirement: MS-ONESTORE_R926 Site.CaptureRequirementIfIsTrue( baseRevisionId.GUID == ridDependent.Guid && baseRevisionId.Value == ridDependent.N, 926, @"[In Revisions] § Base Revision ID: MUST be equal to the revision store file dependency revision identifier (section 2.1.9)."); ExGuid objectGroupId = revisionManifestData.RevisionManifestObjectGroupReferencesList[0].ObjectGroupExtendedGUID; bool isFoundObjectGroup = false; isFoundObjectGroup = package.DataRoot.Where(o => o.ObjectGroupID == objectGroupId).ToArray().Length > 0 || package.OtherFileNodeList.Where(o => o.ObjectGroupID == objectGroupId).ToArray().Length > 0; // Verify MS-ONESTORE requirement: MS-ONESTORE_R935 Site.CaptureRequirementIfIsTrue( isFoundObjectGroup, 935, @"[In Object Groups] The Revision Manifest Data Element structure, as specified in [MS-FSSHTTPB] section 2.2.1.12.5, that references an object group MUST specify the object group extended GUID to be equal to the revision store object group identifier."); } #endregion }