mirror of https://github.com/containrrr/watchtower
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
package manifest_test
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
	"time"
 | 
						|
 | 
						|
	"github.com/containrrr/watchtower/internal/actions/mocks"
 | 
						|
	"github.com/containrrr/watchtower/pkg/registry/manifest"
 | 
						|
	apiTypes "github.com/docker/docker/api/types"
 | 
						|
	. "github.com/onsi/ginkgo"
 | 
						|
	. "github.com/onsi/gomega"
 | 
						|
)
 | 
						|
 | 
						|
func TestManifest(t *testing.T) {
 | 
						|
	RegisterFailHandler(Fail)
 | 
						|
	RunSpecs(t, "Manifest Suite")
 | 
						|
}
 | 
						|
 | 
						|
var _ = Describe("the manifest module", func() {
 | 
						|
	Describe("BuildManifestURL", func() {
 | 
						|
		It("should return a valid url given a fully qualified image", func() {
 | 
						|
			imageRef := "ghcr.io/containrrr/watchtower:mytag"
 | 
						|
			expected := "https://ghcr.io/v2/containrrr/watchtower/manifests/mytag"
 | 
						|
 | 
						|
			URL, err := buildMockContainerManifestURL(imageRef)
 | 
						|
			Expect(err).NotTo(HaveOccurred())
 | 
						|
			Expect(URL).To(Equal(expected))
 | 
						|
		})
 | 
						|
		It("should assume Docker Hub for image refs with no explicit registry", func() {
 | 
						|
			imageRef := "containrrr/watchtower:latest"
 | 
						|
			expected := "https://index.docker.io/v2/containrrr/watchtower/manifests/latest"
 | 
						|
 | 
						|
			URL, err := buildMockContainerManifestURL(imageRef)
 | 
						|
			Expect(err).NotTo(HaveOccurred())
 | 
						|
			Expect(URL).To(Equal(expected))
 | 
						|
		})
 | 
						|
		It("should assume latest for image refs with no explicit tag", func() {
 | 
						|
			imageRef := "containrrr/watchtower"
 | 
						|
			expected := "https://index.docker.io/v2/containrrr/watchtower/manifests/latest"
 | 
						|
 | 
						|
			URL, err := buildMockContainerManifestURL(imageRef)
 | 
						|
			Expect(err).NotTo(HaveOccurred())
 | 
						|
			Expect(URL).To(Equal(expected))
 | 
						|
		})
 | 
						|
		It("should not prepend library/ for single-part container names in registries other than Docker Hub", func() {
 | 
						|
			imageRef := "docker-registry.domain/imagename:latest"
 | 
						|
			expected := "https://docker-registry.domain/v2/imagename/manifests/latest"
 | 
						|
 | 
						|
			URL, err := buildMockContainerManifestURL(imageRef)
 | 
						|
			Expect(err).NotTo(HaveOccurred())
 | 
						|
			Expect(URL).To(Equal(expected))
 | 
						|
		})
 | 
						|
		It("should throw an error on pinned images", func() {
 | 
						|
			imageRef := "docker-registry.domain/imagename@sha256:daf7034c5c89775afe3008393ae033529913548243b84926931d7c84398ecda7"
 | 
						|
			URL, err := buildMockContainerManifestURL(imageRef)
 | 
						|
			Expect(err).To(HaveOccurred())
 | 
						|
			Expect(URL).To(BeEmpty())
 | 
						|
		})
 | 
						|
	})
 | 
						|
})
 | 
						|
 | 
						|
func buildMockContainerManifestURL(imageRef string) (string, error) {
 | 
						|
	imageInfo := apiTypes.ImageInspect{
 | 
						|
		RepoTags: []string{
 | 
						|
			imageRef,
 | 
						|
		},
 | 
						|
	}
 | 
						|
	mockID := "mock-id"
 | 
						|
	mockName := "mock-container"
 | 
						|
	mockCreated := time.Now()
 | 
						|
	mock := mocks.CreateMockContainerWithImageInfo(mockID, mockName, imageRef, mockCreated, imageInfo)
 | 
						|
 | 
						|
	return manifest.BuildManifestURL(mock)
 | 
						|
}
 |