diff options
Diffstat (limited to 'pkg/v1/remote/delete_test.go')
-rw-r--r-- | pkg/v1/remote/delete_test.go | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/pkg/v1/remote/delete_test.go b/pkg/v1/remote/delete_test.go new file mode 100644 index 0000000..4918e16 --- /dev/null +++ b/pkg/v1/remote/delete_test.go @@ -0,0 +1,89 @@ +// Copyright 2018 Google LLC All Rights Reserved. +// +// 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 remote + +import ( + "fmt" + "net/http" + "net/http/httptest" + "net/url" + "testing" + + "github.com/google/go-containerregistry/pkg/name" +) + +func TestDelete(t *testing.T) { + expectedRepo := "write/time" + manifestPath := fmt.Sprintf("/v2/%s/manifests/latest", expectedRepo) + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case "/v2/": + w.WriteHeader(http.StatusOK) + case manifestPath: + if r.Method != http.MethodDelete { + t.Errorf("Method; got %v, want %v", r.Method, http.MethodDelete) + } + http.Error(w, "Deleted", http.StatusOK) + default: + t.Fatalf("Unexpected path: %v", r.URL.Path) + } + })) + defer server.Close() + u, err := url.Parse(server.URL) + if err != nil { + t.Fatalf("url.Parse(%v) = %v", server.URL, err) + } + tag, err := name.NewTag(fmt.Sprintf("%s/%s:latest", u.Host, expectedRepo), name.WeakValidation) + if err != nil { + t.Fatalf("NewTag() = %v", err) + } + + if err := Delete(tag); err != nil { + t.Errorf("Delete() = %v", err) + } +} + +func TestDeleteBadStatus(t *testing.T) { + expectedRepo := "write/time" + manifestPath := fmt.Sprintf("/v2/%s/manifests/latest", expectedRepo) + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case "/v2/": + w.WriteHeader(http.StatusOK) + case manifestPath: + if r.Method != http.MethodDelete { + t.Errorf("Method; got %v, want %v", r.Method, http.MethodDelete) + } + http.Error(w, "Boom Goes Server", http.StatusInternalServerError) + default: + t.Fatalf("Unexpected path: %v", r.URL.Path) + } + })) + defer server.Close() + u, err := url.Parse(server.URL) + if err != nil { + t.Fatalf("url.Parse(%v) = %v", server.URL, err) + } + tag, err := name.NewTag(fmt.Sprintf("%s/%s:latest", u.Host, expectedRepo), name.WeakValidation) + if err != nil { + t.Fatalf("NewTag() = %v", err) + } + + if err := Delete(tag); err == nil { + t.Error("Delete() = nil; wanted error") + } +} |