public async Task TokenAuthAsync() { LocalEmulatorTokenCredential simpleEmulatorTokenCredential = new LocalEmulatorTokenCredential( "VGhpcyBpcyBhIHNhbXBsZSBzdHJpbmc=", defaultDateTime: new DateTime(2020, 9, 21, 9, 9, 9, DateTimeKind.Utc)); using AuthorizationTokenProvider cosmosAuthorization = new AuthorizationTokenProviderTokenCredential( simpleEmulatorTokenCredential, new Uri("https://127.0.0.1:8081"), requestTimeout: TimeSpan.FromSeconds(30), backgroundTokenCredentialRefreshInterval: TimeSpan.FromSeconds(1)); { StoreResponseNameValueCollection headers = new StoreResponseNameValueCollection(); (string token, string payload) = await cosmosAuthorization.GetUserAuthorizationAsync( "dbs\\test", ResourceType.Database.ToResourceTypeString(), "GET", headers, AuthorizationTokenType.PrimaryMasterKey); Assert.AreEqual( "type%3daad%26ver%3d1.0%26sig%3dew0KICAgICAgICAgICAgICAgICJhbGciOiJSUzI1NiIsDQogICAgICAgICAgICAgICAgImtpZCI6InhfOUtTdXNLVTVZY0hmNCIsDQogICAgICAgICAgICAgICAgInR5cCI6IkpXVCINCiAgICAgICAgICAgIH0.ew0KICAgICAgICAgICAgICAgICJvaWQiOiI5NjMxMzAzNC00NzM5LTQzY2ItOTNjZC03NDE5M2FkYmU1YjYiLA0KICAgICAgICAgICAgICAgICJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLA0KICAgICAgICAgICAgICAgICJncm91cHMiOlsNCiAgICAgICAgICAgICAgICAgICAgIjdjZTFkMDAzLTRjYjMtNDg3OS1iN2M1LTc0MDYyYTM1YzY2ZSIsDQogICAgICAgICAgICAgICAgICAgICJlOTlmZjMwYy1jMjI5LTRjNjctYWIyOS0zMGE2YWViYzNlNTgiLA0KICAgICAgICAgICAgICAgICAgICAiNTU0OWJiNjItYzc3Yi00MzA1LWJkYTktOWVjNjZiODVkOWU0IiwNCiAgICAgICAgICAgICAgICAgICAgImM0NGZkNjg1LTVjNTgtNDUyYy1hYWY3LTEzY2U3NTE4NGY2NSIsDQogICAgICAgICAgICAgICAgICAgICJiZTg5NTIxNS1lYWI1LTQzYjctOTUzNi05ZWY4ZmUxMzAzMzAiDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICAibmJmIjoxNjAwNjc5MzQ5LA0KICAgICAgICAgICAgICAgICJleHAiOjE2MDA2ODI5NDksDQogICAgICAgICAgICAgICAgImlhdCI6MTU5NjU5MjMzNSwNCiAgICAgICAgICAgICAgICAiaXNzIjoiaHR0cHM6Ly9zdHMuZmFrZS1pc3N1ZXIubmV0LzdiMTk5OWExLWRmZDctNDQwZS04MjA0LTAwMTcwOTc5Yjk4NCIsDQogICAgICAgICAgICAgICAgImF1ZCI6Imh0dHBzOi8vbG9jYWxob3N0LmxvY2FsaG9zdCINCiAgICAgICAgICAgIH0.VkdocGN5QnBjeUJoSUhOaGJYQnNaU0J6ZEhKcGJtYz0" , token); Assert.IsNull(payload); } { StoreResponseNameValueCollection headers = new StoreResponseNameValueCollection(); (string token, string payload) = await cosmosAuthorization.GetUserAuthorizationAsync( "dbs\\test\\colls\\abc", ResourceType.Collection.ToResourceTypeString(), "PUT", headers, AuthorizationTokenType.PrimaryMasterKey); Assert.AreEqual( "type%3daad%26ver%3d1.0%26sig%3dew0KICAgICAgICAgICAgICAgICJhbGciOiJSUzI1NiIsDQogICAgICAgICAgICAgICAgImtpZCI6InhfOUtTdXNLVTVZY0hmNCIsDQogICAgICAgICAgICAgICAgInR5cCI6IkpXVCINCiAgICAgICAgICAgIH0.ew0KICAgICAgICAgICAgICAgICJvaWQiOiI5NjMxMzAzNC00NzM5LTQzY2ItOTNjZC03NDE5M2FkYmU1YjYiLA0KICAgICAgICAgICAgICAgICJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLA0KICAgICAgICAgICAgICAgICJncm91cHMiOlsNCiAgICAgICAgICAgICAgICAgICAgIjdjZTFkMDAzLTRjYjMtNDg3OS1iN2M1LTc0MDYyYTM1YzY2ZSIsDQogICAgICAgICAgICAgICAgICAgICJlOTlmZjMwYy1jMjI5LTRjNjctYWIyOS0zMGE2YWViYzNlNTgiLA0KICAgICAgICAgICAgICAgICAgICAiNTU0OWJiNjItYzc3Yi00MzA1LWJkYTktOWVjNjZiODVkOWU0IiwNCiAgICAgICAgICAgICAgICAgICAgImM0NGZkNjg1LTVjNTgtNDUyYy1hYWY3LTEzY2U3NTE4NGY2NSIsDQogICAgICAgICAgICAgICAgICAgICJiZTg5NTIxNS1lYWI1LTQzYjctOTUzNi05ZWY4ZmUxMzAzMzAiDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICAibmJmIjoxNjAwNjc5MzQ5LA0KICAgICAgICAgICAgICAgICJleHAiOjE2MDA2ODI5NDksDQogICAgICAgICAgICAgICAgImlhdCI6MTU5NjU5MjMzNSwNCiAgICAgICAgICAgICAgICAiaXNzIjoiaHR0cHM6Ly9zdHMuZmFrZS1pc3N1ZXIubmV0LzdiMTk5OWExLWRmZDctNDQwZS04MjA0LTAwMTcwOTc5Yjk4NCIsDQogICAgICAgICAgICAgICAgImF1ZCI6Imh0dHBzOi8vbG9jYWxob3N0LmxvY2FsaG9zdCINCiAgICAgICAgICAgIH0.VkdocGN5QnBjeUJoSUhOaGJYQnNaU0J6ZEhKcGJtYz0" , token); Assert.IsNull(payload); } { StoreResponseNameValueCollection headers = new StoreResponseNameValueCollection(); (string token, string payload) = await cosmosAuthorization.GetUserAuthorizationAsync( "dbs\\test\\colls\\abc\\docs\\1234", ResourceType.Document.ToResourceTypeString(), "GET", headers, AuthorizationTokenType.PrimaryMasterKey); Assert.AreEqual( "type%3daad%26ver%3d1.0%26sig%3dew0KICAgICAgICAgICAgICAgICJhbGciOiJSUzI1NiIsDQogICAgICAgICAgICAgICAgImtpZCI6InhfOUtTdXNLVTVZY0hmNCIsDQogICAgICAgICAgICAgICAgInR5cCI6IkpXVCINCiAgICAgICAgICAgIH0.ew0KICAgICAgICAgICAgICAgICJvaWQiOiI5NjMxMzAzNC00NzM5LTQzY2ItOTNjZC03NDE5M2FkYmU1YjYiLA0KICAgICAgICAgICAgICAgICJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLA0KICAgICAgICAgICAgICAgICJncm91cHMiOlsNCiAgICAgICAgICAgICAgICAgICAgIjdjZTFkMDAzLTRjYjMtNDg3OS1iN2M1LTc0MDYyYTM1YzY2ZSIsDQogICAgICAgICAgICAgICAgICAgICJlOTlmZjMwYy1jMjI5LTRjNjctYWIyOS0zMGE2YWViYzNlNTgiLA0KICAgICAgICAgICAgICAgICAgICAiNTU0OWJiNjItYzc3Yi00MzA1LWJkYTktOWVjNjZiODVkOWU0IiwNCiAgICAgICAgICAgICAgICAgICAgImM0NGZkNjg1LTVjNTgtNDUyYy1hYWY3LTEzY2U3NTE4NGY2NSIsDQogICAgICAgICAgICAgICAgICAgICJiZTg5NTIxNS1lYWI1LTQzYjctOTUzNi05ZWY4ZmUxMzAzMzAiDQogICAgICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICAibmJmIjoxNjAwNjc5MzQ5LA0KICAgICAgICAgICAgICAgICJleHAiOjE2MDA2ODI5NDksDQogICAgICAgICAgICAgICAgImlhdCI6MTU5NjU5MjMzNSwNCiAgICAgICAgICAgICAgICAiaXNzIjoiaHR0cHM6Ly9zdHMuZmFrZS1pc3N1ZXIubmV0LzdiMTk5OWExLWRmZDctNDQwZS04MjA0LTAwMTcwOTc5Yjk4NCIsDQogICAgICAgICAgICAgICAgImF1ZCI6Imh0dHBzOi8vbG9jYWxob3N0LmxvY2FsaG9zdCINCiAgICAgICAgICAgIH0.VkdocGN5QnBjeUJoSUhOaGJYQnNaU0J6ZEhKcGJtYz0" , token); Assert.IsNull(payload); } }
private static StoreResponseNameValueCollection GenerateTestHeaders() { StoreResponseNameValueCollection headers = new StoreResponseNameValueCollection(); for (int i = 0; i < 15; i++) { string random = Guid.NewGuid().ToString(); headers[random] = random; } return(headers); }
internal static INameValueCollection ExtractResponseHeaders(HttpResponseMessage responseMessage) { INameValueCollection headers = new StoreResponseNameValueCollection(); foreach (KeyValuePair <string, IEnumerable <string> > headerPair in responseMessage.Headers) { if (string.Compare(headerPair.Key, HttpConstants.HttpHeaders.OwnerFullName, StringComparison.Ordinal) == 0) { foreach (string val in headerPair.Value) { headers.Add(headerPair.Key, Uri.UnescapeDataString(val)); } } else { foreach (string val in headerPair.Value) { headers.Add(headerPair.Key, val); } } } if (responseMessage.Content != null) { foreach (KeyValuePair <string, IEnumerable <string> > headerPair in responseMessage.Content.Headers) { if (string.Compare(headerPair.Key, HttpConstants.HttpHeaders.OwnerFullName, StringComparison.Ordinal) == 0) { foreach (string val in headerPair.Value) { headers.Add(headerPair.Key, Uri.UnescapeDataString(val)); } } else { foreach (string val in headerPair.Value) { headers.Add(headerPair.Key, val); } } } } return(headers); }
public async Task ResourceTokenAsync() { using AuthorizationTokenProvider cosmosAuthorization = new AuthorizationTokenProviderResourceToken("VGhpcyBpcyBhIHNhbXBsZSBzdHJpbmc="); { StoreResponseNameValueCollection headers = new StoreResponseNameValueCollection(); (string token, string payload) = await cosmosAuthorization.GetUserAuthorizationAsync( "dbs\\test", ResourceType.Database.ToResourceTypeString(), "GET", headers, AuthorizationTokenType.PrimaryMasterKey); Assert.AreEqual("VGhpcyBpcyBhIHNhbXBsZSBzdHJpbmc%3d", token); Assert.IsNull(payload); } { StoreResponseNameValueCollection headers = new StoreResponseNameValueCollection(); (string token, string payload) = await cosmosAuthorization.GetUserAuthorizationAsync( "dbs\\test\\colls\\abc", ResourceType.Collection.ToResourceTypeString(), "PUT", headers, AuthorizationTokenType.PrimaryMasterKey); Assert.AreEqual("VGhpcyBpcyBhIHNhbXBsZSBzdHJpbmc%3d", token); Assert.IsNull(payload); } { StoreResponseNameValueCollection headers = new StoreResponseNameValueCollection(); (string token, string payload) = await cosmosAuthorization.GetUserAuthorizationAsync( "dbs\\test\\colls\\abc\\docs\\1234", ResourceType.Document.ToResourceTypeString(), "GET", headers, AuthorizationTokenType.PrimaryMasterKey); Assert.AreEqual("VGhpcyBpcyBhIHNhbXBsZSBzdHJpbmc%3d", token); Assert.IsNull(payload); } }
/// <summary> /// For mocking a Gateway response /// </summary> /// <param name="request">The <see cref="DocumentServiceRequest"/> instance.</param> /// <returns>A <see cref="DocumentServiceResponse"/> instance.</returns> public static DocumentServiceResponse GetDocumentServiceResponse(DocumentServiceRequest request) { StoreResponseNameValueCollection headers = MockRequestHelper.GenerateTestHeaders(); if (request.OperationType == OperationType.Read) { if (request.ResourceAddress.EndsWith(MockedItemBenchmarkHelper.ExistingItemId)) { return(new DocumentServiceResponse( new MemoryStream(MockRequestHelper.testItemResponsePayload), headers, System.Net.HttpStatusCode.OK )); } return(new DocumentServiceResponse( Stream.Null, headers, System.Net.HttpStatusCode.NotFound )); } if (request.OperationType == OperationType.Delete) { if (request.ResourceAddress.EndsWith(MockedItemBenchmarkHelper.ExistingItemId)) { return(new DocumentServiceResponse( new MemoryStream(MockRequestHelper.testItemResponsePayload), headers, System.Net.HttpStatusCode.OK )); } return(new DocumentServiceResponse( Stream.Null, headers, System.Net.HttpStatusCode.NotFound )); } if (request.OperationType == OperationType.Create || request.OperationType == OperationType.Replace || request.OperationType == OperationType.Upsert || request.OperationType == OperationType.Patch) { return(new DocumentServiceResponse( new MemoryStream(MockRequestHelper.testItemResponsePayload), headers, System.Net.HttpStatusCode.OK )); } if (request.ResourceType == ResourceType.Document && request.OperationType == OperationType.ReadFeed) { return(new DocumentServiceResponse( new MemoryStream(MockRequestHelper.testItemFeedResponsePayload), headers, System.Net.HttpStatusCode.OK )); } return(null); }
/// <summary> /// For mocking a TransportClient response/ /// </summary> /// <param name="request">The <see cref="DocumentServiceRequest"/> instance.</param> /// <returns>A <see cref="StoreResponse"/> instance.</returns> public static StoreResponse GetStoreResponse(DocumentServiceRequest request) { StoreResponseNameValueCollection headers = MockRequestHelper.GenerateTestHeaders(); if (request.OperationType == OperationType.Read) { headers.Add(WFConstants.BackendHeaders.LSN, "1"); if (request.ResourceAddress.EndsWith(MockedItemBenchmarkHelper.ExistingItemId)) { return(new StoreResponse() { ResponseBody = new MemoryStream(MockRequestHelper.testItemResponsePayload, 0, MockRequestHelper.testItemResponsePayload.Length, writable: false, publiclyVisible: true), Status = (int)System.Net.HttpStatusCode.OK, Headers = headers, }); } return(new StoreResponse() { ResponseBody = Stream.Null, Status = (int)System.Net.HttpStatusCode.NotFound, Headers = headers, }); } if (request.OperationType == OperationType.Delete) { if (request.ResourceAddress.EndsWith(MockedItemBenchmarkHelper.ExistingItemId)) { return(new StoreResponse() { ResponseBody = new MemoryStream(MockRequestHelper.testItemResponsePayload, 0, MockRequestHelper.testItemResponsePayload.Length, writable: false, publiclyVisible: true), Status = (int)System.Net.HttpStatusCode.OK, Headers = headers, }); } return(new StoreResponse() { ResponseBody = Stream.Null, Status = (int)System.Net.HttpStatusCode.NotFound, Headers = headers, }); } if (request.OperationType == OperationType.Create || request.OperationType == OperationType.Replace || request.OperationType == OperationType.Upsert || request.OperationType == OperationType.Patch) { return(new StoreResponse() { ResponseBody = new MemoryStream(MockRequestHelper.testItemResponsePayload, 0, MockRequestHelper.testItemResponsePayload.Length, writable: false, publiclyVisible: true), Status = (int)System.Net.HttpStatusCode.OK, Headers = headers, }); } if (request.ResourceType == ResourceType.Document && request.OperationType == OperationType.ReadFeed) { return(new StoreResponse() { ResponseBody = new MemoryStream(MockRequestHelper.testItemFeedResponsePayload, 0, MockRequestHelper.testItemFeedResponsePayload.Length, writable: false, publiclyVisible: true), Status = (int)System.Net.HttpStatusCode.OK, Headers = headers, }); } if (request.OperationType == OperationType.Batch) { MemoryStream responseContent = batchResponsePayloadWriter.GeneratePayload(); return(new StoreResponse() { ResponseBody = responseContent, Status = (int)System.Net.HttpStatusCode.OK, Headers = headers, }); } return(null); }
/// <summary> /// For mocking a TransportClient response/ /// </summary> /// <param name="request">The <see cref="DocumentServiceRequest"/> instance.</param> /// <returns>A <see cref="StoreResponse"/> instance.</returns> public static StoreResponse GetStoreResponse(DocumentServiceRequest request) { if (request.ResourceType == ResourceType.Document && request.OperationType == OperationType.Query) { StoreResponseNameValueCollection queryHeaders = new StoreResponseNameValueCollection() { ActivityId = Guid.NewGuid().ToString(), BackendRequestDurationMilliseconds = "1.42", CurrentReplicaSetSize = "1", CurrentWriteQuorum = "1", CurrentResourceQuotaUsage = "documentSize=0;documentsSize=1;documentsCount=1;collectionSize=1;", GlobalCommittedLSN = "-1", LSN = "2540", LocalLSN = "2540", LastStateChangeUtc = "Wed, 18 Aug 2021 20:30:05.117 GMT", MaxResourceQuota = "documentSize=10240;documentsSize=10485760;documentsCount=-1;collectionSize=10485760;", NumberOfReadRegions = "0", OwnerFullName = "dbs/f4ac3cfd-dd38-4adb-b2d2-be97b3efbd1b/colls/2a926112-a26e-4935-ac6a-66df269c890d", OwnerId = "GHRtAJahWQ4=", PartitionKeyRangeId = "0", PendingPKDelete = "false", QueryExecutionInfo = "{\"reverseRidEnabled\":false,\"reverseIndexScan\":false}", QueryMetrics = "totalExecutionTimeInMs=0.78;queryCompileTimeInMs=0.26;queryLogicalPlanBuildTimeInMs=0.04;queryPhysicalPlanBuildTimeInMs=0.18;queryOptimizationTimeInMs=0.01;VMExecutionTimeInMs=0.04;indexLookupTimeInMs=0.00;documentLoadTimeInMs=0.02;systemFunctionExecuteTimeInMs=0.00;userFunctionExecuteTimeInMs=0.00;retrievedDocumentCount=1;retrievedDocumentSize=671;outputDocumentCount=1;outputDocumentSize=720;writeOutputTimeInMs=0.00;indexUtilizationRatio=1.00", QuorumAckedLSN = "2540", QuorumAckedLocalLSN = "2540", RequestCharge = "2.27", SchemaVersion = "1.12", ServerVersion = " version=2.14.0.0", SessionToken = "0:-1#2540", TransportRequestID = "2", XPRole = "0", }; return(new StoreResponse() { ResponseBody = new MemoryStream(MockRequestHelper.testItemFeedResponsePayload, 0, MockRequestHelper.testItemFeedResponsePayload.Length, writable: false, publiclyVisible: true), Status = (int)System.Net.HttpStatusCode.OK, Headers = queryHeaders, }); } StoreResponseNameValueCollection headers = MockRequestHelper.GenerateTestHeaders(); if (request.OperationType == OperationType.Read) { headers.Add(WFConstants.BackendHeaders.LSN, "1"); if (request.ResourceAddress.EndsWith(MockedItemBenchmarkHelper.ExistingItemId)) { return(new StoreResponse() { ResponseBody = new MemoryStream(MockRequestHelper.testItemResponsePayload, 0, MockRequestHelper.testItemResponsePayload.Length, writable: false, publiclyVisible: true), Status = (int)System.Net.HttpStatusCode.OK, Headers = headers, }); } return(new StoreResponse() { ResponseBody = Stream.Null, Status = (int)System.Net.HttpStatusCode.NotFound, Headers = headers, }); } if (request.OperationType == OperationType.Delete) { if (request.ResourceAddress.EndsWith(MockedItemBenchmarkHelper.ExistingItemId)) { return(new StoreResponse() { ResponseBody = new MemoryStream(MockRequestHelper.testItemResponsePayload, 0, MockRequestHelper.testItemResponsePayload.Length, writable: false, publiclyVisible: true), Status = (int)System.Net.HttpStatusCode.OK, Headers = headers, }); } return(new StoreResponse() { ResponseBody = Stream.Null, Status = (int)System.Net.HttpStatusCode.NotFound, Headers = headers, }); } if (request.OperationType == OperationType.Create || request.OperationType == OperationType.Replace || request.OperationType == OperationType.Upsert || request.OperationType == OperationType.Patch) { return(new StoreResponse() { ResponseBody = new MemoryStream(MockRequestHelper.testItemResponsePayload, 0, MockRequestHelper.testItemResponsePayload.Length, writable: false, publiclyVisible: true), Status = (int)System.Net.HttpStatusCode.OK, Headers = headers, }); } if (request.ResourceType == ResourceType.Document && request.OperationType == OperationType.ReadFeed) { return(new StoreResponse() { ResponseBody = new MemoryStream(MockRequestHelper.testItemFeedResponsePayload, 0, MockRequestHelper.testItemFeedResponsePayload.Length, writable: false, publiclyVisible: true), Status = (int)System.Net.HttpStatusCode.OK, Headers = headers, }); } if (request.OperationType == OperationType.Batch) { MemoryStream responseContent = batchResponsePayloadWriter.GeneratePayload(); return(new StoreResponse() { ResponseBody = responseContent, Status = (int)System.Net.HttpStatusCode.OK, Headers = headers, }); } return(null); }