Skip to content

Commit 0fd76ba

Browse files
Caleb BroseCaleb Brose
authored andcommitted
TESTS!
1 parent 3bbd48e commit 0fd76ba

16 files changed

+911
-93
lines changed

cosmos-db/cosmos-db.psm1

Lines changed: 53 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ Function Invoke-CosmosDbApiRequestWithContinuation([string]$verb, [string]$url,
204204
}
205205
}
206206

207-
Function Get-PartitionKeyRanges
207+
Function Get-PartitionKeyRangesOrError
208208
(
209209
[parameter(Mandatory=$true)][string]$ResourceGroup,
210210
[parameter(Mandatory=$true)][string]$Database,
@@ -213,33 +213,40 @@ Function Get-PartitionKeyRanges
213213
[parameter(Mandatory=$true)][string]$SubscriptionId
214214
)
215215
{
216-
$baseUrl = Get-BaseDatabaseUrl $Database
217-
$collectionsUrl=Get-CollectionsUrl $Container $Collection
218-
$pkRangeUrl="$collectionsUrl/$PARTITIONKEYRANGE_TYPE"
216+
try
217+
{
218+
$baseUrl = Get-BaseDatabaseUrl $Database
219+
$collectionsUrl=Get-CollectionsUrl $Container $Collection
220+
$pkRangeUrl="$collectionsUrl/$PARTITIONKEYRANGE_TYPE"
219221

220-
$url = "$baseUrl/$pkRangeUrl"
222+
$url = "$baseUrl/$pkRangeUrl"
221223

222-
$cacheKey = $url
223-
$cacheResult = Get-CacheValue -Key $cacheKey -Cache $PARTITION_KEY_RANGE_CACHE
224-
if ($cacheResult)
225-
{
226-
return $cacheResult
227-
}
224+
$cacheKey = $url
225+
$cacheResult = Get-CacheValue -Key $cacheKey -Cache $PARTITION_KEY_RANGE_CACHE
226+
if ($cacheResult)
227+
{
228+
return $cacheResult
229+
}
228230

229-
$now = Get-Time
231+
$now = Get-Time
230232

231-
$encodedAuthString = Get-AuthorizationHeader -ResourceGroup $ResourceGroup -SubscriptionId $SubscriptionId -Database $Database -verb $GET_VERB -resourceType $PARTITIONKEYRANGE_TYPE -resourceUrl $collectionsUrl -now $now
233+
$encodedAuthString = Get-AuthorizationHeader -ResourceGroup $ResourceGroup -SubscriptionId $SubscriptionId -Database $Database -verb $GET_VERB -resourceType $PARTITIONKEYRANGE_TYPE -resourceUrl $collectionsUrl -now $now
232234

233-
$headers = Get-CommonHeaders -now $now -encodedAuthString $encodedAuthString -PartitionKey $requestPartitionKey
234-
$headers["x-ms-documentdb-query-enablecrosspartition"] = "true"
235+
$headers = Get-CommonHeaders -now $now -encodedAuthString $encodedAuthString -PartitionKey $requestPartitionKey
236+
$headers["x-ms-documentdb-query-enablecrosspartition"] = "true"
235237

236-
$response = Invoke-CosmosDbApiRequest -Verb $GET_VERB -Url $url -Headers $headers | Get-CosmosDbRecordContent
238+
$response = Invoke-CosmosDbApiRequest -Verb $GET_VERB -Url $url -Headers $headers | Get-CosmosDbRecordContent
237239

238-
$ranges = $response.partitionKeyRanges
240+
$ranges = $response.partitionKeyRanges
239241

240-
Set-CacheValue -Key $cacheKey -Value $ranges -Cache $PARTITION_KEY_RANGE_CACHE -ExpirationHours 6
242+
Set-CacheValue -Key $cacheKey -Value $ranges -Cache $PARTITION_KEY_RANGE_CACHE -ExpirationHours 6
241243

242-
$ranges
244+
$ranges
245+
}
246+
catch [System.Net.WebException]
247+
{
248+
$_.Exception
249+
}
243250
}
244251

245252
Function Get-FilteredPartitionKeyRangesForQuery($allRanges, $queryRanges)
@@ -537,10 +544,21 @@ Function Search-CosmosDbRecords(
537544
}
538545
}
539546

540-
Function Search-CosmosDbRecordsWithExtraFeatures([string]$ResourceGroup, [string]$Database, [string]$Container, [string]$Collection, [string]$Query, $Parameters, [string]$SubscriptionId)
547+
Function Search-CosmosDbRecordsWithExtraFeatures
548+
(
549+
[string]$ResourceGroup,
550+
[string]$Database,
551+
[string]$Container,
552+
[string]$Collection,
553+
[string]$Query,
554+
$Parameters,
555+
[string]$SubscriptionId
556+
)
541557
{
542558
begin
543559
{
560+
$Parameters = @(Get-QueryParametersAsNameValuePairs $Parameters)
561+
544562
$baseUrl=Get-BaseDatabaseUrl $Database
545563
$collectionsUrl=Get-CollectionsUrl $Container $Collection
546564
$docsUrl="$collectionsUrl/$DOCS_TYPE"
@@ -551,12 +569,17 @@ Function Search-CosmosDbRecordsWithExtraFeatures([string]$ResourceGroup, [string
551569

552570
$encodedAuthString=Get-AuthorizationHeader -ResourceGroup $ResourceGroup -SubscriptionId $SubscriptionId -Database $Database -verb $POST_VERB -resourceType $DOCS_TYPE -resourceUrl $collectionsUrl -now $now
553571

554-
$allPartitionKeyRanges = Get-PartitionKeyRanges -ResourceGroup $ResourceGroup -Database $Database -Container $Container -Collection $Collection -SubscriptionId $SubscriptionId
572+
$allPartitionKeyRangesOrError = Get-PartitionKeyRangesOrError -ResourceGroup $ResourceGroup -Database $Database -Container $Container -Collection $Collection -SubscriptionId $SubscriptionId
555573
}
556574
process
557575
{
558576
try
559577
{
578+
if ($allPartitionKeyRangesOrError -is [System.Net.WebException])
579+
{
580+
throw $allPartitionKeyRangesOrError
581+
}
582+
560583
$body = @{
561584
query = $Query;
562585
parameters = $Parameters;
@@ -571,32 +594,32 @@ Function Search-CosmosDbRecordsWithExtraFeatures([string]$ResourceGroup, [string
571594
"x-ms-cosmos-is-query-plan-request" = "True";
572595
}
573596

574-
$response = Invoke-CosmosDbApiRequest -verb $POST_VERB -url $url -Body $body -Headers $headers | Get-CosmosDbRecordContent
597+
$queryPlan = Invoke-CosmosDbApiRequest -verb $POST_VERB -url $url -Body $body -Headers $headers | Get-CosmosDbRecordContent
575598

576-
$rewrittenQuery = $response.QueryInfo.RewrittenQuery
599+
$rewrittenQuery = $queryPlan.QueryInfo.RewrittenQuery
577600
$searchQuery = if ($rewrittenQuery) { $rewrittenQuery } else { $Query };
578601

602+
$body = @{
603+
query = $searchQuery;
604+
parameters = $Parameters;
605+
}
606+
579607
$headers.Remove("x-ms-cosmos-is-query-plan-request")
580608

581609
$partitionKeyRanges =
582610
if ($env:COSMOS_DB_FLAG_ENABLE_PARTITION_KEY_RANGE_SEARCHES -eq 1)
583611
{
584-
Get-FilteredPartitionKeyRangesForQuery -AllRanges $partitionKeyRanges -QueryRanges $response.QueryRanges
612+
Get-FilteredPartitionKeyRangesForQuery -AllRanges $allPartitionKeyRangesOrError -QueryRanges $queryPlan.QueryRanges
585613
}
586614
else
587615
{
588-
$allPartitionKeyRanges
616+
$allPartitionKeyRangesOrError
589617
}
590618

591619
foreach ($partitionKeyRange in $partitionKeyRanges)
592620
{
593621
$headers["x-ms-documentdb-partitionkeyrangeid"] = $partitionKeyRange.id
594622

595-
$body = @{
596-
query = $searchQuery;
597-
parameters = $Parameters;
598-
}
599-
600623
Invoke-CosmosDbApiRequestWithContinuation -verb $POST_VERB -url $url -Body $body -Headers $headers
601624
}
602625
}
@@ -888,11 +911,6 @@ Function Get-CosmosDbRecordContent([parameter(ValueFromPipeline)]$RecordResponse
888911
}
889912
}
890913

891-
Function Use-CosmosDbFiddlerDebugging()
892-
{
893-
$env:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1
894-
}
895-
896914
Function Use-CosmosDbInternalFlag
897915
(
898916
$enableFiddlerDebugging=$null,

tests/Get-AllCosmosDbRecords.Tests.ps1

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ Import-Module $PSScriptRoot\..\cosmos-db\cosmos-db.psm1 -Force
44
InModuleScope cosmos-db {
55
Describe "Get-AllCosmosDbRecords" {
66
BeforeAll {
7+
Use-CosmosDbInternalFlag -EnableCaching $false
8+
79
. $PSScriptRoot\Utils.ps1
810

911
$global:capturedNow = $null

tests/Get-AuthorizationHeader.Tests.ps1

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ Import-Module $PSScriptRoot\..\cosmos-db\cosmos-db.psm1 -Force
44
InModuleScope cosmos-db {
55
Describe "Get-AuthorizationHeader" {
66
BeforeAll {
7+
Use-CosmosDbInternalFlag -EnableCaching $false
8+
79
$MOCK_SUB = "MOCK_SUB"
810
$MOCK_RG = "MOCK_RG"
911
$MOCK_DB = "MOCK_DB"

tests/Get-CommonHeaders.Tests.ps1

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ Import-Module $PSScriptRoot\..\cosmos-db\cosmos-db.psm1 -Force
44
InModuleScope cosmos-db {
55
Describe "Get-AuthorizationHeader" {
66
BeforeAll {
7+
Use-CosmosDbInternalFlag -EnableCaching $false
8+
79
. $PSScriptRoot\Utils.ps1
810
}
911

tests/Get-CosmosDbRecord.Tests.ps1

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ Import-Module $PSScriptRoot\..\cosmos-db\cosmos-db.psm1 -Force
44
InModuleScope cosmos-db {
55
Describe "Get-CosmosDbRecord" {
66
BeforeAll {
7+
Use-CosmosDbInternalFlag -EnableCaching $false
8+
79
. $PSScriptRoot\Utils.ps1
810

911
$global:capturedNow = $null
Lines changed: 50 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,73 @@
11
Get-Module cosmos-db | Remove-Module -Force
22
Import-Module $PSScriptRoot\..\cosmos-db\cosmos-db.psm1 -Force
33

4-
Describe "Get-CosmosDbRecordContent" {
5-
BeforeAll {
6-
. $PSScriptRoot\Utils.ps1
7-
}
4+
InModuleScope cosmos-db {
5+
Describe "Get-CosmosDbRecordContent" {
6+
BeforeAll {
7+
Use-CosmosDbInternalFlag -EnableCaching $false
88

9-
It "Returns the Content of a successful response" {
10-
$content = @{
11-
Key1 = "Value1";
12-
Key2 = 2;
13-
Nested = @{
14-
NestedKey1 = "NestedValue1";
15-
NestedKey2 = 2;
16-
}
9+
. $PSScriptRoot\Utils.ps1
1710
}
1811

19-
$response = @{
20-
StatusCode = 200;
21-
Content = ($content | ConvertTo-Json -Depth 100)
22-
}
12+
It "Returns the Content of a successful response" {
13+
$content = @{
14+
Key1 = "Value1";
15+
Key2 = 2;
16+
Nested = @{
17+
NestedKey1 = "NestedValue1";
18+
NestedKey2 = 2;
19+
}
20+
}
2321

24-
$result = $response | Get-CosmosDbRecordContent
22+
$response = @{
23+
StatusCode = 200;
24+
Content = ($content | ConvertTo-Json -Depth 100)
25+
}
2526

26-
AssertHashtablesEqual $content ($result | PSObjectToHashtable)
27-
}
27+
$result = $response | Get-CosmosDbRecordContent
2828

29-
It "Returns nothing for a response with no content" {
30-
$response = @{
31-
StatusCode = 200;
29+
AssertHashtablesEqual $content ($result | PSObjectToHashtable)
3230
}
3331

34-
$result = $response | Get-CosmosDbRecordContent
32+
It "Returns nothing for a response with no content" {
33+
$response = @{
34+
StatusCode = 200;
35+
}
3536

36-
$result | Should -Be $null
37-
}
37+
$result = $response | Get-CosmosDbRecordContent
3838

39-
It "Throws not found for 404" {
40-
$response = @{
41-
StatusCode = 404;
39+
$result | Should -Be $null
4240
}
4341

44-
{ $response | Get-CosmosDbRecordContent } | Should -Throw "Record not found"
45-
}
46-
47-
It "Throws throttle for 429" {
48-
$response = @{
49-
StatusCode = 429;
50-
}
42+
It "Throws not found for 404" {
43+
$response = @{
44+
StatusCode = 404;
45+
}
5146

52-
{ $response | Get-CosmosDbRecordContent } | Should -Throw "Request rate limited"
53-
}
47+
{ $response | Get-CosmosDbRecordContent } | Should -Throw "Record not found"
48+
}
5449

55-
It "Throws useful error for unknown errors" {
56-
$errorMessage = "Mock error message"
57-
$errorResponse = @{
58-
message = $errorMessage
59-
} | ConvertTo-Json
50+
It "Throws throttle for 429" {
51+
$response = @{
52+
StatusCode = 429;
53+
}
6054

61-
$response = [pscustomobject] @{
62-
StatusCode = 401;
55+
{ $response | Get-CosmosDbRecordContent } | Should -Throw "Request rate limited"
6356
}
64-
$response | Add-Member -memberType ScriptMethod -Name "GetResponseStream" -Value { [IO.MemoryStream]::new([Text.Encoding]::UTF8.GetBytes($errorResponse)) } -Force
57+
58+
It "Throws useful error for unknown errors" {
59+
$errorMessage = "Mock error message"
60+
$errorResponse = @{
61+
message = $errorMessage
62+
} | ConvertTo-Json
6563

64+
$response = [pscustomobject] @{
65+
StatusCode = 401;
66+
}
67+
$response | Add-Member -memberType ScriptMethod -Name "GetResponseStream" -Value { [IO.MemoryStream]::new([Text.Encoding]::UTF8.GetBytes($errorResponse)) } -Force
6668

67-
{ $response | Get-CosmosDbRecordContent } | Should -Throw "Request failed with status code 401 with message`n`n$errorMessage"
69+
70+
{ $response | Get-CosmosDbRecordContent } | Should -Throw "Request failed with status code 401 with message`n`n$errorMessage"
71+
}
6872
}
6973
}

0 commit comments

Comments
 (0)