| // Copyright 2019 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package queue |
| |
| import ( |
| "testing" |
| "time" |
| |
| "github.com/golang/protobuf/ptypes" |
| "github.com/google/go-cmp/cmp" |
| "golang.org/x/pkgsite/internal/config" |
| taskspb "google.golang.org/genproto/googleapis/cloud/tasks/v2" |
| "google.golang.org/protobuf/proto" |
| ) |
| |
| func TestNewTaskID(t *testing.T) { |
| // Verify that the task ID is the same within taskIDChangeInterval and changes |
| // afterwards. |
| var ( |
| module = "mod" |
| version = "ver" |
| taskIDChangeInterval = 3 * time.Hour |
| ) |
| tm := time.Now().Truncate(taskIDChangeInterval) |
| id1 := newTaskID(module, version, tm, taskIDChangeInterval) |
| id2 := newTaskID(module, version, tm.Add(taskIDChangeInterval/2), taskIDChangeInterval) |
| if id1 != id2 { |
| t.Error("wanted same task ID, got different") |
| } |
| id3 := newTaskID(module, version, tm.Add(taskIDChangeInterval+1), taskIDChangeInterval) |
| if id1 == id3 { |
| t.Error("wanted different task ID, got same") |
| } |
| } |
| |
| func TestNewTaskRequest(t *testing.T) { |
| for _, test := range []struct { |
| name string |
| cfg config.Config |
| want *taskspb.CreateTaskRequest |
| }{ |
| { |
| "AppEngine", |
| config.Config{ |
| ProjectID: "Project", |
| LocationID: "us-central1", |
| QueueService: "Service", |
| }, |
| &taskspb.CreateTaskRequest{ |
| Parent: "projects/Project/locations/us-central1/queues/queueID", |
| Task: &taskspb.Task{ |
| DispatchDeadline: ptypes.DurationProto(maxCloudTasksTimeout), |
| MessageType: &taskspb.Task_AppEngineHttpRequest{ |
| AppEngineHttpRequest: &taskspb.AppEngineHttpRequest{ |
| HttpMethod: taskspb.HttpMethod_POST, |
| RelativeUri: "/fetch/mod/@v/v1.2.3", |
| AppEngineRouting: &taskspb.AppEngineRouting{ |
| Service: "Service", |
| }, |
| }, |
| }, |
| }, |
| }, |
| }, |
| { |
| "non-AppEngine", |
| config.Config{ |
| ProjectID: "Project", |
| LocationID: "us-central1", |
| QueueURL: "http://1.2.3.4:8000", |
| ServiceAccount: "sa", |
| QueueAudience: "qa", |
| }, |
| &taskspb.CreateTaskRequest{ |
| Parent: "projects/Project/locations/us-central1/queues/queueID", |
| Task: &taskspb.Task{ |
| DispatchDeadline: ptypes.DurationProto(maxCloudTasksTimeout), |
| MessageType: &taskspb.Task_HttpRequest{ |
| HttpRequest: &taskspb.HttpRequest{ |
| HttpMethod: taskspb.HttpMethod_POST, |
| Url: "http://1.2.3.4:8000/fetch/mod/@v/v1.2.3", |
| AuthorizationHeader: &taskspb.HttpRequest_OidcToken{ |
| OidcToken: &taskspb.OidcToken{ |
| ServiceAccountEmail: "sa", |
| Audience: "qa", |
| }, |
| }, |
| }, |
| }, |
| }, |
| }, |
| }, |
| } { |
| t.Run(test.name, func(t *testing.T) { |
| gcp, err := newGCP(&test.cfg, nil, "queueID") |
| if err != nil { |
| t.Fatal(err) |
| } |
| got := gcp.newTaskRequest("mod", "v1.2.3", "suf", time.Minute) |
| test.want.Task.Name = got.Task.Name |
| if diff := cmp.Diff(test.want, got, cmp.Comparer(proto.Equal)); diff != "" { |
| t.Errorf("mismatch (-want, +got):\n%s", diff) |
| } |
| }) |
| } |
| } |