Skip to content
This repository has been archived by the owner on Feb 20, 2020. It is now read-only.

Commit

Permalink
Bug 1380978 - Resolve with malformed-payload exception if artifact ex…
Browse files Browse the repository at this point in the history
…pires after task expiry
  • Loading branch information
petemoore committed Jul 17, 2017
1 parent 57b5079 commit e4a56ac
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 5 deletions.
3 changes: 3 additions & 0 deletions main.go
Expand Up @@ -790,6 +790,9 @@ func (task *TaskRun) validatePayload() *CommandExecutionError {
if time.Time(artifact.Expires).Before(time.Time(task.Definition.Deadline)) {
return MalformedPayloadError(fmt.Errorf("Malformed payload: artifact '%v' expires before task deadline (%v is before %v)", artifact.Path, artifact.Expires, task.Definition.Deadline))
}
if time.Time(artifact.Expires).After(time.Time(task.Definition.Expires)) {
return MalformedPayloadError(fmt.Errorf("Malformed payload: artifact '%v' expires after task expiry (%v is after %v)", artifact.Path, artifact.Expires, task.Definition.Expires))
}
}
return nil
}
Expand Down
89 changes: 84 additions & 5 deletions payload_test.go
Expand Up @@ -111,9 +111,20 @@ func TestValidPayload(t *testing.T) {
}`))
}

// This little hack is to make sure we get a timestamp which is truncated to
// the millisecond
func NowMillis(t *testing.T) (now time.Time) {
var err error
now, err = time.Parse(time.RFC3339, tcclient.Time(time.Now()).String())
if err != nil {
t.Fatalf("Error parsing timestamp - %v", err)
}
return
}

// If an artifact expires before task deadline we should get a Malformed Payload
func TestArtifactExpiresBeforeDeadline(t *testing.T) {
now := time.Now()
now := NowMillis(t)
task := taskWithPayload(`{
"env": {
"XPI_NAME": "dist/example_add-on-0.0.1.zip"
Expand All @@ -129,12 +140,13 @@ func TestArtifactExpiresBeforeDeadline(t *testing.T) {
]
}`)
task.Definition.Deadline = tcclient.Time(now.Add(time.Minute * 10))
task.Definition.Expires = tcclient.Time(now.Add(time.Minute * 20))
ensureMalformedPayload(t, task)
}

// If artifact expires after task deadline, we should not get a Malformed Payload
func TestArtifactExpiresAfterDeadline(t *testing.T) {
now := time.Now()
// If artifact expires with task deadline, we should not get a Malformed Payload
func TestArtifactExpiresWithDeadline(t *testing.T) {
now := NowMillis(t)
task := taskWithPayload(`{
"env": {
"XPI_NAME": "dist/example_add-on-0.0.1.zip"
Expand All @@ -149,6 +161,73 @@ func TestArtifactExpiresAfterDeadline(t *testing.T) {
}
]
}`)
task.Definition.Deadline = tcclient.Time(now.Add(time.Minute * 5))
task.Definition.Deadline = tcclient.Time(now.Add(time.Minute * 10))
task.Definition.Expires = tcclient.Time(now.Add(time.Minute * 20))
ensureValidPayload(t, task)
}

// If artifact expires after task deadline, but before task expiry, we should not get a Malformed Payload
func TestArtifactExpiresBetweenDeadlineAndTaskExpiry(t *testing.T) {
now := NowMillis(t)
task := taskWithPayload(`{
"env": {
"XPI_NAME": "dist/example_add-on-0.0.1.zip"
},
"maxRunTime": 3,
` + rawHelloGoodbye() + `,
"artifacts": [
{
"type": "file",
"path": "public/some/artifact",
"expires": "` + tcclient.Time(now.Add(time.Minute*15)).String() + `"
}
]
}`)
task.Definition.Deadline = tcclient.Time(now.Add(time.Minute * 10))
task.Definition.Expires = tcclient.Time(now.Add(time.Minute * 20))
ensureValidPayload(t, task)
}

// If artifact expires with task expiry, we should not get a Malformed Payload
func TestArtifactExpiresWithTask(t *testing.T) {
now := NowMillis(t)
task := taskWithPayload(`{
"env": {
"XPI_NAME": "dist/example_add-on-0.0.1.zip"
},
"maxRunTime": 3,
` + rawHelloGoodbye() + `,
"artifacts": [
{
"type": "file",
"path": "public/some/artifact",
"expires": "` + tcclient.Time(now.Add(time.Minute*20)).String() + `"
}
]
}`)
task.Definition.Deadline = tcclient.Time(now.Add(time.Minute * 10))
task.Definition.Expires = tcclient.Time(now.Add(time.Minute * 20))
ensureValidPayload(t, task)
}

// If an artifact expires after task expiry we should get a Malformed Payload
func TestArtifactExpiresAfterTaskExpiry(t *testing.T) {
now := NowMillis(t)
task := taskWithPayload(`{
"env": {
"XPI_NAME": "dist/example_add-on-0.0.1.zip"
},
"maxRunTime": 3,
` + rawHelloGoodbye() + `,
"artifacts": [
{
"type": "file",
"path": "public/some/artifact",
"expires": "` + tcclient.Time(now.Add(time.Minute*25)).String() + `"
}
]
}`)
task.Definition.Deadline = tcclient.Time(now.Add(time.Minute * 10))
task.Definition.Expires = tcclient.Time(now.Add(time.Minute * 20))
ensureMalformedPayload(t, task)
}

0 comments on commit e4a56ac

Please sign in to comment.