github.phpd.cn/hashicorp/packer@v1.3.2/builder/azure/arm/azure_error_response_test.go (about) 1 package arm 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/approvals/go-approval-tests" 8 "github.com/hashicorp/packer/common/json" 9 ) 10 11 const AzureErrorSimple = `{"error":{"code":"ResourceNotFound","message":"The Resource 'Microsoft.Compute/images/PackerUbuntuImage' under resource group 'packer-test00' was not found."}}` 12 const AzureErrorNested = `{"status":"Failed","error":{"code":"DeploymentFailed","message":"At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/arm-debug for usage details.","details":[{"code":"BadRequest","message":"{\r\n \"error\": {\r\n \"code\": \"InvalidRequestFormat\",\r\n \"message\": \"Cannot parse the request.\",\r\n \"details\": [\r\n {\r\n \"code\": \"InvalidJson\",\r\n \"message\": \"Error converting value \\\"playground\\\" to type 'Microsoft.WindowsAzure.Networking.Nrp.Frontend.Contract.Csm.Public.IpAllocationMethod'. Path 'properties.publicIPAllocationMethod', line 1, position 130.\"\r\n }\r\n ]\r\n }\r\n}"}]}}` 13 14 func TestAzureErrorSimpleShouldUnmarshal(t *testing.T) { 15 var azureErrorResponse azureErrorResponse 16 err := json.Unmarshal([]byte(AzureErrorSimple), &azureErrorResponse) 17 if err != nil { 18 t.Fatal(err) 19 } 20 21 if azureErrorResponse.ErrorDetails.Code != "ResourceNotFound" { 22 t.Errorf("Error.Code") 23 } 24 if azureErrorResponse.ErrorDetails.Message != "The Resource 'Microsoft.Compute/images/PackerUbuntuImage' under resource group 'packer-test00' was not found." { 25 t.Errorf("Error.Message") 26 } 27 } 28 29 func TestAzureErrorNestedShouldUnmarshal(t *testing.T) { 30 var azureError azureErrorResponse 31 err := json.Unmarshal([]byte(AzureErrorNested), &azureError) 32 if err != nil { 33 t.Fatal(err) 34 } 35 36 if azureError.ErrorDetails.Code != "DeploymentFailed" { 37 t.Errorf("Error.Code") 38 } 39 if !strings.HasPrefix(azureError.ErrorDetails.Message, "At least one resource deployment operation failed") { 40 t.Errorf("Error.Message") 41 } 42 } 43 44 func TestAzureErrorEmptyShouldFormat(t *testing.T) { 45 var aer azureErrorResponse 46 s := aer.Error() 47 48 if s != "" { 49 t.Fatalf("Expected \"\", but got %s", aer.Error()) 50 } 51 } 52 53 func TestAzureErrorSimpleShouldFormat(t *testing.T) { 54 var azureErrorResponse azureErrorResponse 55 err := json.Unmarshal([]byte(AzureErrorSimple), &azureErrorResponse) 56 if err != nil { 57 t.Fatal(err) 58 } 59 60 err = approvaltests.VerifyString(t, azureErrorResponse.Error()) 61 if err != nil { 62 t.Fatal(err) 63 } 64 } 65 66 func TestAzureErrorNestedShouldFormat(t *testing.T) { 67 var azureErrorResponse azureErrorResponse 68 err := json.Unmarshal([]byte(AzureErrorNested), &azureErrorResponse) 69 if err != nil { 70 t.Fatal(err) 71 } 72 73 err = approvaltests.VerifyString(t, azureErrorResponse.Error()) 74 if err != nil { 75 t.Fatal(err) 76 } 77 }