/// <summary> /// A method used to create a CellSubRequest object for QueryChanges and initialize it. /// </summary> /// <param name="subRequestId">A parameter represents the subRequest identifier.</param> /// <returns>A return value represents the CellRequest object for QueryChanges.</returns> private CellSubRequestType CreateCellSubRequestEmbeddedQueryChanges(ulong subRequestId) { FsshttpbCellRequest cellRequest = this.CreateFsshttpbCellRequest(); QueryChangesCellSubRequest queryChange = this.BuildFsshttpbQueryChangesSubRequest(subRequestId); cellRequest.AddSubRequest(queryChange, null); CellSubRequestType cellSubRequest = this.CreateCellSubRequest(SequenceNumberGenerator.GetCurrentToken(), cellRequest.ToBase64()); return(cellSubRequest); }
/// <summary> /// A method used to create a QueryChanges CellSubRequest object and initialize it. /// </summary> /// <param name="subRequestId">A parameter represents subRequest id.</param> /// <param name="reserved">A parameter that must be set to zero.</param> /// <param name="isAllowFragments">A parameter represents that if to allow fragments.</param> /// <param name="isExcludeObjectData">A parameter represents if to exclude object data.</param> /// <param name="isIncludeFilteredOutDataElementsInKnowledge">A parameter represents if to include the serial numbers of filtered out data elements in the response knowledge.</param> /// <param name="reserved1">A parameter represents a 4-bit reserved field that must be set to zero.</param> /// <param name="isStorageManifestIncluded">A parameter represents if to include the storage manifest.</param> /// <param name="isCellChangesIncluded">A parameter represents if to include the cell changes.</param> /// <param name="reserved2">A parameter represents a 6-bit reserved field that must be set to zero.</param> /// <param name="cellId">A parameter represents if the Query Changes are scoped to a specific cell. If the Cell ID is 0x0000, no scoping restriction is specified.</param> /// <param name="maxDataElements">A parameter represents the maximum data elements to return.</param> /// <param name="queryChangesFilterList">A parameter represents how the results of the query will be filtered before it is returned to the client.</param> /// <param name="knowledge">A parameter represents what the client knows about a state of a file.</param> /// <returns>A return value represents QueryChanges CellSubRequest object.</returns> private QueryChangesCellSubRequest BuildFsshttpbQueryChangesSubRequest( ulong subRequestId, int reserved = 0, bool isAllowFragments = false, bool isExcludeObjectData = false, bool isIncludeFilteredOutDataElementsInKnowledge = true, int reserved1 = 0, bool isStorageManifestIncluded = true, bool isCellChangesIncluded = true, int reserved2 = 0, CellID cellId = null, ulong?maxDataElements = null, List <Filter> queryChangesFilterList = null, Knowledge knowledge = null) { QueryChangesCellSubRequest queryChange = new QueryChangesCellSubRequest(subRequestId); queryChange.Reserved = reserved; queryChange.AllowFragments = Convert.ToInt32(isAllowFragments); queryChange.ExcludeObjectData = Convert.ToInt32(isExcludeObjectData); queryChange.IncludeFilteredOutDataElementsInKnowledge = Convert.ToInt32(isIncludeFilteredOutDataElementsInKnowledge); queryChange.Reserved1 = reserved1; queryChange.IncludeStorageManifest = Convert.ToInt32(isStorageManifestIncluded); queryChange.IncludeCellChanges = Convert.ToInt32(isCellChangesIncluded); queryChange.Reserved2 = reserved2; if (cellId == null) { cellId = new CellID(new ExGuid(0, Guid.Empty), new ExGuid(0, Guid.Empty)); } queryChange.CellId = cellId; if (maxDataElements != null) { queryChange.MaxDataElements = new Compact64bitInt(maxDataElements.Value); } queryChange.QueryChangeFilters = queryChangesFilterList; queryChange.Knowledge = knowledge; return(queryChange); }
public void TestCase_S15_TC03_Download_UploadPartial() { string fileUrl = Common.GetConfigurationPropertyValue("BigFile", this.Site); string uploadFileUrl = SharedTestSuiteHelper.GenerateNonExistFileUrl(Site); bool partial = false; Knowledge knowledge = null; // Set the limit number of upload tries, this will allow 500000 * 10 bytes size file to be download and complete upload. int limitNumberOfPartialUpload = 10; do { this.InitializeContext(fileUrl, this.UserName01, this.Password01, this.Domain); // Create query changes request with allow fragments flag with the value false. FsshttpbCellRequest cellRequest = SharedTestSuiteHelper.CreateFsshttpbCellRequest(); QueryChangesCellSubRequest queryChange = SharedTestSuiteHelper.BuildFsshttpbQueryChangesSubRequest(SequenceNumberGenerator.GetCurrentFSSHTTPBSubRequestID(), 0, false, false, true, 0, true, true, 0, null, 500000, null, knowledge); cellRequest.AddSubRequest(queryChange, null); CellSubRequestType cellSubRequest = SharedTestSuiteHelper.CreateCellSubRequest(SequenceNumberGenerator.GetCurrentToken(), cellRequest.ToBase64()); CellStorageResponse cellStorageResponse = this.Adapter.CellStorageRequest(fileUrl, new SubRequestType[] { cellSubRequest }); CellSubResponseType subResponse = SharedTestSuiteHelper.ExtractSubResponse <CellSubResponseType>(cellStorageResponse, 0, 0, this.Site); this.Site.Assert.AreEqual <ErrorCodeType>( ErrorCodeType.Success, SharedTestSuiteHelper.ConvertToErrorCodeType(subResponse.ErrorCode, this.Site), "Test case cannot continue unless the query changes succeed."); FsshttpbResponse queryResponse = SharedTestSuiteHelper.ExtractFsshttpbResponse(subResponse, this.Site); SharedTestSuiteHelper.ExpectMsfsshttpbSubResponseSucceed(queryResponse, this.Site); QueryChangesSubResponseData data = queryResponse.CellSubResponses[0].GetSubResponseData <QueryChangesSubResponseData>(); partial = data.PartialResult; knowledge = data.Knowledge; this.InitializeContext(uploadFileUrl, this.UserName01, this.Password01, this.Domain); cellRequest = SharedTestSuiteHelper.CreateFsshttpbCellRequest(); PutChangesCellSubRequest putChange = new PutChangesCellSubRequest(SequenceNumberGenerator.GetCurrentFSSHTTPBSubRequestID(), null); putChange.Partial = partial ? 1 : 0; putChange.PartialLast = partial ? 0 : 1; putChange.StorageIndexExtendedGUID = partial ? null : data.StorageIndexExtendedGUID; if (partial) { var storageIndex = queryResponse.DataElementPackage.DataElements.FirstOrDefault(e => e.DataElementType == DataElementType.StorageIndexDataElementData); if (storageIndex != null) { queryResponse.DataElementPackage.DataElements.Remove(storageIndex); } } cellRequest.AddSubRequest(putChange, queryResponse.DataElementPackage.DataElements); cellSubRequest = SharedTestSuiteHelper.CreateCellSubRequest(SequenceNumberGenerator.GetCurrentToken(), cellRequest.ToBase64()); cellStorageResponse = this.Adapter.CellStorageRequest(uploadFileUrl, new SubRequestType[] { cellSubRequest }); subResponse = SharedTestSuiteHelper.ExtractSubResponse <CellSubResponseType>(cellStorageResponse, 0, 0, this.Site); this.Site.Assert.AreEqual <ErrorCodeType>( ErrorCodeType.Success, SharedTestSuiteHelper.ConvertToErrorCodeType(subResponse.ErrorCode, this.Site), "Test case cannot continue unless the query changes succeed."); FsshttpbResponse putResponse = SharedTestSuiteHelper.ExtractFsshttpbResponse(subResponse, this.Site); SharedTestSuiteHelper.ExpectMsfsshttpbSubResponseSucceed(putResponse, this.Site); // Decrease the number of upload tries. limitNumberOfPartialUpload--; }while (partial && limitNumberOfPartialUpload > 0); this.StatusManager.RecordFileUpload(uploadFileUrl); }