158 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Go
		
	
	
| package notifications
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"strings"
 | |
| 	"testing"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/docker/distribution/manifest/schema1"
 | |
| )
 | |
| 
 | |
| // 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) {
 | |
| 	var expected = strings.TrimSpace(`
 | |
| {
 | |
|    "events": [
 | |
|       {
 | |
|          "id": "asdf-asdf-asdf-asdf-0",
 | |
|          "timestamp": "2006-01-02T15:04:05Z",
 | |
|          "action": "push",
 | |
|          "target": {
 | |
|             "mediaType": "application/vnd.docker.distribution.manifest.v1+json",
 | |
|             "size": 1,
 | |
|             "digest": "sha256:0123456789abcdef0",
 | |
|             "length": 1,
 | |
|             "repository": "library/test",
 | |
|             "url": "http://example.com/v2/library/test/manifests/latest"
 | |
|          },
 | |
|          "request": {
 | |
|             "id": "asdfasdf",
 | |
|             "addr": "client.local",
 | |
|             "host": "registrycluster.local",
 | |
|             "method": "PUT",
 | |
|             "useragent": "test/0.1"
 | |
|          },
 | |
|          "actor": {
 | |
|             "name": "test-actor"
 | |
|          },
 | |
|          "source": {
 | |
|             "addr": "hostname.local:port"
 | |
|          }
 | |
|       },
 | |
|       {
 | |
|          "id": "asdf-asdf-asdf-asdf-1",
 | |
|          "timestamp": "2006-01-02T15:04:05Z",
 | |
|          "action": "push",
 | |
|          "target": {
 | |
|             "mediaType": "application/vnd.docker.container.image.rootfs.diff+x-gtar",
 | |
|             "size": 2,
 | |
|             "digest": "sha256:3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d5",
 | |
|             "length": 2,
 | |
|             "repository": "library/test",
 | |
|             "url": "http://example.com/v2/library/test/manifests/latest"
 | |
|          },
 | |
|          "request": {
 | |
|             "id": "asdfasdf",
 | |
|             "addr": "client.local",
 | |
|             "host": "registrycluster.local",
 | |
|             "method": "PUT",
 | |
|             "useragent": "test/0.1"
 | |
|          },
 | |
|          "actor": {
 | |
|             "name": "test-actor"
 | |
|          },
 | |
|          "source": {
 | |
|             "addr": "hostname.local:port"
 | |
|          }
 | |
|       },
 | |
|       {
 | |
|          "id": "asdf-asdf-asdf-asdf-2",
 | |
|          "timestamp": "2006-01-02T15:04:05Z",
 | |
|          "action": "push",
 | |
|          "target": {
 | |
|             "mediaType": "application/vnd.docker.container.image.rootfs.diff+x-gtar",
 | |
|             "size": 3,
 | |
|             "digest": "sha256:3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d6",
 | |
|             "length": 3,
 | |
|             "repository": "library/test",
 | |
|             "url": "http://example.com/v2/library/test/manifests/latest"
 | |
|          },
 | |
|          "request": {
 | |
|             "id": "asdfasdf",
 | |
|             "addr": "client.local",
 | |
|             "host": "registrycluster.local",
 | |
|             "method": "PUT",
 | |
|             "useragent": "test/0.1"
 | |
|          },
 | |
|          "actor": {
 | |
|             "name": "test-actor"
 | |
|          },
 | |
|          "source": {
 | |
|             "addr": "hostname.local:port"
 | |
|          }
 | |
|       }
 | |
|    ]
 | |
| }
 | |
| 	`)
 | |
| 
 | |
| 	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
 | |
| 	prototype.Action = EventActionPush
 | |
| 	prototype.Timestamp = tm
 | |
| 	prototype.Actor.Name = "test-actor"
 | |
| 	prototype.Request.ID = "asdfasdf"
 | |
| 	prototype.Request.Addr = "client.local"
 | |
| 	prototype.Request.Host = "registrycluster.local"
 | |
| 	prototype.Request.Method = "PUT"
 | |
| 	prototype.Request.UserAgent = "test/0.1"
 | |
| 	prototype.Source.Addr = "hostname.local:port"
 | |
| 
 | |
| 	var manifestPush Event
 | |
| 	manifestPush = prototype
 | |
| 	manifestPush.ID = "asdf-asdf-asdf-asdf-0"
 | |
| 	manifestPush.Target.Digest = "sha256:0123456789abcdef0"
 | |
| 	manifestPush.Target.Length = 1
 | |
| 	manifestPush.Target.Size = 1
 | |
| 	manifestPush.Target.MediaType = schema1.MediaTypeManifest
 | |
| 	manifestPush.Target.Repository = "library/test"
 | |
| 	manifestPush.Target.URL = "http://example.com/v2/library/test/manifests/latest"
 | |
| 
 | |
| 	var layerPush0 Event
 | |
| 	layerPush0 = prototype
 | |
| 	layerPush0.ID = "asdf-asdf-asdf-asdf-1"
 | |
| 	layerPush0.Target.Digest = "sha256:3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d5"
 | |
| 	layerPush0.Target.Length = 2
 | |
| 	layerPush0.Target.Size = 2
 | |
| 	layerPush0.Target.MediaType = layerMediaType
 | |
| 	layerPush0.Target.Repository = "library/test"
 | |
| 	layerPush0.Target.URL = "http://example.com/v2/library/test/manifests/latest"
 | |
| 
 | |
| 	var layerPush1 Event
 | |
| 	layerPush1 = prototype
 | |
| 	layerPush1.ID = "asdf-asdf-asdf-asdf-2"
 | |
| 	layerPush1.Target.Digest = "sha256:3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d6"
 | |
| 	layerPush1.Target.Length = 3
 | |
| 	layerPush1.Target.Size = 3
 | |
| 	layerPush1.Target.MediaType = layerMediaType
 | |
| 	layerPush1.Target.Repository = "library/test"
 | |
| 	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)
 | |
| 	}
 | |
| }
 |