Skip to content

Commit

Permalink
furnace: Add test fro queue
Browse files Browse the repository at this point in the history
  • Loading branch information
onprem committed Dec 24, 2020
1 parent 93342c6 commit 5a110b3
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 6 deletions.
1 change: 0 additions & 1 deletion pkg/furnace/furnace.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ func (f *Furnace) Build(ctx context.Context, req *api.BuildRequest) (*api.BuildR
}, nil
}

// TODO(prmsrswt): Implement IsQueued.
func (f *Furnace) IsQueued(ctx context.Context, req *api.IsQueuedRequest) (*api.IsQueuedResponse, error) {
return &api.IsQueuedResponse{
Status: f.buildQueue.isQueued(Package{Name: req.GetPackage().GetName()}),
Expand Down
6 changes: 1 addition & 5 deletions pkg/furnace/furnace_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,20 @@ func TestBuild(t *testing.T) {
cases := []struct {
name string
req *api.BuildRequest
want *api.BuildResponse
wantErr bool
}{
{
name: "req with single package",
req: &api.BuildRequest{
Packages: []*api.Package{{Name: "yay"}},
},
want: &api.BuildResponse{},
wantErr: false,
},
{
name: "req with empty packages array",
req: &api.BuildRequest{
Packages: []*api.Package{},
},
want: &api.BuildResponse{},
wantErr: false,
},
{
Expand All @@ -44,7 +41,6 @@ func TestBuild(t *testing.T) {
{Name: "godot"},
},
},
want: &api.BuildResponse{},
wantErr: false,
},
}
Expand All @@ -58,7 +54,7 @@ func TestBuild(t *testing.T) {
assert.NotNil(t, err, "error should not be nil")
assert.Nil(t, res, "response should be nil")
} else {
assert.Equal(t, res, tc.want)
assert.Nil(t, err)
}
})
}
Expand Down
73 changes: 73 additions & 0 deletions pkg/furnace/queue_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package furnace

import (
"testing"

"github.com/stretchr/testify/assert"
)

var defaultPackages = []Package{{Name: "default"}, {Name: "test"}}

func TestEnqueue(t *testing.T) {
cases := []struct {
name string
input []Package
}{
{
name: "enqueueing a few packages",
input: []Package{{Name: "yay"}, {Name: "polybar"}, {Name: "timeshift"}, {Name: "godot"}},
},
{
name: "enqueueing zero packages",
input: []Package(nil),
},
}

for _, v := range cases {
tc := v
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
q := &queue{}
q.enqueue(tc.input)

assert.Equal(t, tc.input, q.items)
})
}
}

func TestDequeue(t *testing.T) {
q := &queue{
items: defaultPackages,
}

for _, v := range defaultPackages {
pkg := v
t.Run("dequeueing concurrently", func(t *testing.T) {
got, ok := q.dequeue()
assert.True(t, ok)
assert.Equal(t, got, pkg)
})
}
_, ok := q.dequeue()
assert.False(t, ok)
}

func TestDequeueConcurrent(t *testing.T) {
q := &queue{
items: defaultPackages,
}

t.Run("group", func(t *testing.T) {
for i := 0; i < len(defaultPackages); i++ {
t.Run("dequeueing concurrently", func(t *testing.T) {
t.Parallel()
_, ok := q.dequeue()
assert.True(t, ok)
})
}
})

// This should be false as we already dequeued everything before this.
_, ok := q.dequeue()
assert.False(t, ok)
}

0 comments on commit 5a110b3

Please sign in to comment.