diff --git a/aci/volumes.go b/aci/volumes.go index a07af69f..8eb804de 100644 --- a/aci/volumes.go +++ b/aci/volumes.go @@ -92,10 +92,9 @@ func (cs *aciVolumeService) Create(ctx context.Context, options interface{}) (vo account, err := accountClient.GetProperties(ctx, cs.aciContext.ResourceGroup, opts.Account, "") if err == nil { w.Event(event(opts.Account, progress.Done, "Use existing")) + } else if !account.HasHTTPStatus(http.StatusNotFound) { + return volumes.Volume{}, err } else { - if account.StatusCode != http.StatusNotFound { - return volumes.Volume{}, err - } result, err := accountClient.CheckNameAvailability(ctx, storage.AccountCheckNameAvailabilityParameters{ Name: to.StringPtr(opts.Account), Type: to.StringPtr("Microsoft.Storage/storageAccounts"), @@ -137,7 +136,7 @@ func (cs *aciVolumeService) Create(ctx context.Context, options interface{}) (vo w.Event(errorEvent(opts.Fileshare)) return volumes.Volume{}, errors.Wrapf(errdefs.ErrAlreadyExists, "Azure fileshare %q already exists", opts.Fileshare) } - if fileShare.StatusCode != http.StatusNotFound { + if !fileShare.HasHTTPStatus(http.StatusNotFound) { w.Event(errorEvent(opts.Fileshare)) return volumes.Volume{}, err } diff --git a/progress/noop.go b/progress/noop.go new file mode 100644 index 00000000..e638b872 --- /dev/null +++ b/progress/noop.go @@ -0,0 +1,34 @@ +/* + Copyright 2020 Docker Compose CLI authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package progress + +import ( + "context" +) + +type noopWriter struct { +} + +func (p *noopWriter) Start(ctx context.Context) error { + return nil +} + +func (p *noopWriter) Event(e Event) { +} + +func (p *noopWriter) Stop() { +} diff --git a/progress/writer.go b/progress/writer.go index e46f9017..23a5d207 100644 --- a/progress/writer.go +++ b/progress/writer.go @@ -73,7 +73,10 @@ func WithContextWriter(ctx context.Context, writer Writer) context.Context { // ContextWriter returns the writer from the context func ContextWriter(ctx context.Context) Writer { - s, _ := ctx.Value(writerKey{}).(Writer) + s, ok := ctx.Value(writerKey{}).(Writer) + if !ok { + return &noopWriter{} + } return s } diff --git a/progress/writer_test.go b/progress/writer_test.go new file mode 100644 index 00000000..2933811b --- /dev/null +++ b/progress/writer_test.go @@ -0,0 +1,31 @@ +/* + Copyright 2020 Docker Compose CLI authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package progress + +import ( + "context" + "testing" + + "gotest.tools/v3/assert" +) + +func TestNoopWriter(t *testing.T) { + todo := context.TODO() + writer := ContextWriter(todo) + + assert.Equal(t, writer, &noopWriter{}) +} diff --git a/tests/aci-e2e/e2e-aci_test.go b/tests/aci-e2e/e2e-aci_test.go index 3456ffc6..3f6c2ff0 100644 --- a/tests/aci-e2e/e2e-aci_test.go +++ b/tests/aci-e2e/e2e-aci_test.go @@ -150,6 +150,15 @@ func TestContainerRunVolume(t *testing.T) { accountName = "e2e" + strconv.Itoa(int(time.Now().UnixNano())) ) + t.Run("check empty volume name validity", func(t *testing.T) { + invalidName := "" + res := c.RunDockerOrExitError("volume", "create", "--storage-account", invalidName, "--fileshare", fileshareName) + res.Assert(t, icmd.Expected{ + ExitCode: 1, + Err: `parameter=accountName constraint=MinLength value="" details: value length must be greater than or equal to 3`, + }) + }) + t.Run("check volume name validity", func(t *testing.T) { invalidName := "some-storage-123" res := c.RunDockerOrExitError("volume", "create", "--storage-account", invalidName, "--fileshare", fileshareName)