2015-01-28 03:37:16 +00:00
package notifications
import (
"encoding/json"
"strings"
"testing"
"time"
2015-03-05 04:57:14 +00:00
2023-05-09 11:18:47 +00:00
"github.com/distribution/distribution/v3/manifest/schema1" //nolint:staticcheck // Ignore SA1019: "github.com/distribution/distribution/v3/manifest/schema1" is deprecated, as it's used for backward compatibility.
2015-01-28 03:37:16 +00:00
)
// TestEventJSONFormat provides silly test to detect if the event format or
// envelope has changed. If this code fails, the revision of the protocol may
// need to be incremented.
func TestEventEnvelopeJSONFormat ( t * testing . T ) {
2022-11-02 21:05:45 +00:00
expected := strings . TrimSpace ( `
2015-01-28 03:37:16 +00:00
{
"events" : [
{
2015-01-28 07:27:46 +00:00
"id" : "asdf-asdf-asdf-asdf-0" ,
2015-01-28 03:37:16 +00:00
"timestamp" : "2006-01-02T15:04:05Z" ,
"action" : "push" ,
"target" : {
2016-01-18 18:26:45 +00:00
"mediaType" : "application/vnd.docker.distribution.manifest.v1+prettyjws" ,
2015-01-28 03:37:16 +00:00
"digest" : "sha256:0123456789abcdef0" ,
2022-11-29 21:41:01 +00:00
"size" : 1 ,
2015-07-18 00:07:11 +00:00
"length" : 1 ,
2015-03-05 04:57:14 +00:00
"repository" : "library/test" ,
2015-01-28 03:37:16 +00:00
"url" : "http://example.com/v2/library/test/manifests/latest"
} ,
2015-02-03 21:28:10 +00:00
"request" : {
"id" : "asdfasdf" ,
2015-01-28 07:27:46 +00:00
"addr" : "client.local" ,
"host" : "registrycluster.local" ,
2015-02-03 21:28:10 +00:00
"method" : "PUT" ,
"useragent" : "test/0.1"
} ,
"actor" : {
"name" : "test-actor"
2015-01-28 03:37:16 +00:00
} ,
"source" : {
2015-01-28 07:27:46 +00:00
"addr" : "hostname.local:port"
2015-01-28 03:37:16 +00:00
}
} ,
{
2015-01-28 07:27:46 +00:00
"id" : "asdf-asdf-asdf-asdf-1" ,
2015-01-28 03:37:16 +00:00
"timestamp" : "2006-01-02T15:04:05Z" ,
"action" : "push" ,
"target" : {
2015-03-05 04:57:14 +00:00
"mediaType" : "application/vnd.docker.container.image.rootfs.diff+x-gtar" ,
2015-12-16 01:18:13 +00:00
"digest" : "sha256:3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d5" ,
2022-11-29 21:41:01 +00:00
"size" : 2 ,
2015-07-18 00:07:11 +00:00
"length" : 2 ,
2015-03-05 04:57:14 +00:00
"repository" : "library/test" ,
2015-01-28 03:37:16 +00:00
"url" : "http://example.com/v2/library/test/manifests/latest"
} ,
2015-02-03 21:28:10 +00:00
"request" : {
"id" : "asdfasdf" ,
2015-01-28 07:27:46 +00:00
"addr" : "client.local" ,
"host" : "registrycluster.local" ,
2015-02-03 21:28:10 +00:00
"method" : "PUT" ,
"useragent" : "test/0.1"
} ,
"actor" : {
"name" : "test-actor"
2015-01-28 03:37:16 +00:00
} ,
"source" : {
2015-01-28 07:27:46 +00:00
"addr" : "hostname.local:port"
2015-01-28 03:37:16 +00:00
}
} ,
{
2015-01-28 07:27:46 +00:00
"id" : "asdf-asdf-asdf-asdf-2" ,
2015-01-28 03:37:16 +00:00
"timestamp" : "2006-01-02T15:04:05Z" ,
"action" : "push" ,
"target" : {
2015-03-05 04:57:14 +00:00
"mediaType" : "application/vnd.docker.container.image.rootfs.diff+x-gtar" ,
2015-12-16 01:18:13 +00:00
"digest" : "sha256:3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d6" ,
2022-11-29 21:41:01 +00:00
"size" : 3 ,
2015-07-18 00:07:11 +00:00
"length" : 3 ,
2015-03-05 04:57:14 +00:00
"repository" : "library/test" ,
2015-01-28 03:37:16 +00:00
"url" : "http://example.com/v2/library/test/manifests/latest"
} ,
2015-02-03 21:28:10 +00:00
"request" : {
"id" : "asdfasdf" ,
2015-01-28 07:27:46 +00:00
"addr" : "client.local" ,
"host" : "registrycluster.local" ,
2015-02-03 21:28:10 +00:00
"method" : "PUT" ,
"useragent" : "test/0.1"
} ,
"actor" : {
"name" : "test-actor"
2015-01-28 03:37:16 +00:00
} ,
"source" : {
2015-01-28 07:27:46 +00:00
"addr" : "hostname.local:port"
2015-01-28 03:37:16 +00:00
}
}
]
}
` )
tm , err := time . Parse ( time . RFC3339 , time . RFC3339 [ : len ( time . RFC3339 ) - 5 ] )
if err != nil {
t . Fatalf ( "error creating time: %v" , err )
}
var prototype Event
2015-03-05 04:57:14 +00:00
prototype . Action = EventActionPush
2015-01-28 03:37:16 +00:00
prototype . Timestamp = tm
prototype . Actor . Name = "test-actor"
2015-02-03 21:28:10 +00:00
prototype . Request . ID = "asdfasdf"
prototype . Request . Addr = "client.local"
prototype . Request . Host = "registrycluster.local"
prototype . Request . Method = "PUT"
prototype . Request . UserAgent = "test/0.1"
2015-01-28 07:27:46 +00:00
prototype . Source . Addr = "hostname.local:port"
2015-01-28 03:37:16 +00:00
2022-11-02 21:05:45 +00:00
manifestPush := prototype
2015-01-28 03:37:16 +00:00
manifestPush . ID = "asdf-asdf-asdf-asdf-0"
2023-05-09 11:18:47 +00:00
manifestPush . Target . MediaType = schema1 . MediaTypeSignedManifest //nolint:staticcheck // Ignore SA1019: "github.com/distribution/distribution/v3/manifest/schema1" is deprecated, as it's used for backward compatibility.
2015-01-28 03:37:16 +00:00
manifestPush . Target . Digest = "sha256:0123456789abcdef0"
2015-07-18 00:07:11 +00:00
manifestPush . Target . Size = 1
2022-11-29 21:59:06 +00:00
manifestPush . Target . Length = 1
2015-03-05 04:57:14 +00:00
manifestPush . Target . Repository = "library/test"
2015-01-28 03:37:16 +00:00
manifestPush . Target . URL = "http://example.com/v2/library/test/manifests/latest"
2022-11-02 21:05:45 +00:00
layerPush0 := prototype
2015-01-28 03:37:16 +00:00
layerPush0 . ID = "asdf-asdf-asdf-asdf-1"
2022-11-29 21:59:06 +00:00
layerPush0 . Target . MediaType = layerMediaType
2015-12-16 01:18:13 +00:00
layerPush0 . Target . Digest = "sha256:3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d5"
2015-07-18 00:07:11 +00:00
layerPush0 . Target . Size = 2
2022-11-29 21:59:06 +00:00
layerPush0 . Target . Length = 2
2015-03-05 04:57:14 +00:00
layerPush0 . Target . Repository = "library/test"
2015-01-28 03:37:16 +00:00
layerPush0 . Target . URL = "http://example.com/v2/library/test/manifests/latest"
2022-11-02 21:05:45 +00:00
layerPush1 := prototype
2015-01-28 03:37:16 +00:00
layerPush1 . ID = "asdf-asdf-asdf-asdf-2"
2022-11-29 21:59:06 +00:00
layerPush1 . Target . MediaType = layerMediaType
2015-12-16 01:18:13 +00:00
layerPush1 . Target . Digest = "sha256:3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d6"
2015-07-18 00:07:11 +00:00
layerPush1 . Target . Size = 3
2022-11-29 21:59:06 +00:00
layerPush1 . Target . Length = 3
2015-03-05 04:57:14 +00:00
layerPush1 . Target . Repository = "library/test"
2015-01-28 03:37:16 +00:00
layerPush1 . Target . URL = "http://example.com/v2/library/test/manifests/latest"
var envelope Envelope
envelope . Events = append ( envelope . Events , manifestPush , layerPush0 , layerPush1 )
p , err := json . MarshalIndent ( envelope , "" , " " )
if err != nil {
t . Fatalf ( "unexpected error marshaling envelope: %v" , err )
}
if string ( p ) != expected {
t . Fatalf ( "format has changed\n%s\n != \n%s" , string ( p ) , expected )
}
}