@@ -1016,6 +1016,11 @@ func TestCodeForError(t *testing.T) {
10161016 inputErr : nil ,
10171017 expCode : codes .Internal ,
10181018 },
1019+ {
1020+ name : "user multiattach error" ,
1021+ inputErr : fmt .Errorf ("The disk resource 'projects/foo/disk/bar' is already being used by 'projects/foo/instances/1'" ),
1022+ expCode : codes .InvalidArgument ,
1023+ },
10191024 }
10201025
10211026 for _ , tc := range testCases {
@@ -1077,6 +1082,34 @@ func TestIsContextError(t *testing.T) {
10771082 }
10781083}
10791084
1085+ func TestIsUserMultiAttachError (t * testing.T ) {
1086+ cases := []struct {
1087+ errorString string
1088+ expectedCode codes.Code
1089+ expectCode bool
1090+ }{
1091+ {
1092+ errorString : "The disk resource 'projects/foo/disk/bar' is already being used by 'projects/foo/instance/biz'" ,
1093+ expectedCode : codes .InvalidArgument ,
1094+ expectCode : true ,
1095+ },
1096+ {
1097+ errorString : "The disk resource is ok!" ,
1098+ expectCode : false ,
1099+ },
1100+ }
1101+ for _ , test := range cases {
1102+ code , err := isUserMultiAttachError (fmt .Errorf (test .errorString ))
1103+ if test .expectCode {
1104+ if err != nil || code != test .expectedCode {
1105+ t .Errorf ("Failed with non-nil error %v or bad code %v: %s" , err , code , test .errorString )
1106+ }
1107+ } else if err == nil {
1108+ t .Errorf ("Expected error for test but got none: %s" , test .errorString )
1109+ }
1110+ }
1111+ }
1112+
10801113func TestIsValidDiskEncryptionKmsKey (t * testing.T ) {
10811114 cases := []struct {
10821115 diskEncryptionKmsKey string
0 commit comments