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