Kaynağa Gözat

Merge pull request #644 from docker/fix_edge_cases

Fix edge cases
Guillaume Tardif 5 yıl önce
ebeveyn
işleme
79d671f1eb

+ 3 - 4
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
 	}

+ 34 - 0
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() {
+}

+ 4 - 1
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
 }
 

+ 31 - 0
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{})
+}

+ 9 - 0
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)