Skip to content

Commit 5c5e07d

Browse files
committed
Check queuing works
1 parent a12d4ba commit 5c5e07d

File tree

1 file changed

+50
-7
lines changed

1 file changed

+50
-7
lines changed

cmd/api/api/images_test.go

Lines changed: 50 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package api
22

33
import (
4+
"fmt"
45
"testing"
56
"time"
67

@@ -39,7 +40,21 @@ func TestCreateImage_Async(t *testing.T) {
3940
svc := newTestService(t)
4041
ctx := ctx()
4142

42-
t.Log("Creating image...")
43+
// Create images before alpine to populate the queue
44+
t.Log("Creating image queue...")
45+
queueImages := []string{
46+
"docker.io/library/busybox:latest",
47+
"docker.io/library/nginx:alpine",
48+
}
49+
for _, name := range queueImages {
50+
_, err := svc.CreateImage(ctx, oapi.CreateImageRequestObject{
51+
Body: &oapi.CreateImageRequest{Name: name},
52+
})
53+
require.NoError(t, err)
54+
}
55+
56+
// Create alpine (should be last in queue)
57+
t.Log("Creating alpine image (should be queued)...")
4358
createResp, err := svc.CreateImage(ctx, oapi.CreateImageRequestObject{
4459
Body: &oapi.CreateImageRequest{
4560
Name: "docker.io/library/alpine:latest",
@@ -53,22 +68,35 @@ func TestCreateImage_Async(t *testing.T) {
5368
img := oapi.Image(acceptedResp)
5469
require.Equal(t, "docker.io/library/alpine:latest", img.Name)
5570
require.Equal(t, "img-alpine-latest", img.Id)
56-
t.Logf("Image created: id=%s, initial_status=%s", img.Id, img.Status)
71+
t.Logf("Image created: id=%s, initial_status=%s, queue_position=%v",
72+
img.Id, img.Status, img.QueuePosition)
5773

5874
// Poll until ready
5975
t.Log("Polling for completion...")
60-
for i := 0; i < 300; i++ {
76+
lastStatus := img.Status
77+
lastQueuePos := getQueuePos(img.QueuePosition)
78+
79+
for i := 0; i < 3000; i++ {
6180
getResp, err := svc.GetImage(ctx, oapi.GetImageRequestObject{Id: img.Id})
6281
require.NoError(t, err)
6382

6483
imgResp, ok := getResp.(oapi.GetImage200JSONResponse)
6584
require.True(t, ok, "expected 200 response")
6685

6786
currentImg := oapi.Image(imgResp)
87+
currentQueuePos := getQueuePos(currentImg.QueuePosition)
6888

69-
if i%10 == 0 || currentImg.Status != img.Status {
70-
t.Logf("Poll #%d: status=%s, queue_position=%v, has_size=%v",
71-
i+1, currentImg.Status, currentImg.QueuePosition, currentImg.SizeBytes != nil)
89+
// Log when status or queue position changes
90+
if currentImg.Status != lastStatus || currentQueuePos != lastQueuePos {
91+
t.Logf("Update: status=%s, queue_position=%v", currentImg.Status, formatQueuePos(currentImg.QueuePosition))
92+
93+
// Queue position should only decrease (never increase)
94+
if lastQueuePos > 0 && currentQueuePos > lastQueuePos {
95+
t.Errorf("Queue position increased: %d -> %d", lastQueuePos, currentQueuePos)
96+
}
97+
98+
lastStatus = currentImg.Status
99+
lastQueuePos = currentQueuePos
72100
}
73101

74102
if currentImg.Status == oapi.ImageStatus(images.StatusReady) {
@@ -87,9 +115,24 @@ func TestCreateImage_Async(t *testing.T) {
87115
t.Fatalf("Build failed: %s", errMsg)
88116
}
89117

90-
time.Sleep(100 * time.Millisecond)
118+
time.Sleep(10 * time.Millisecond)
91119
}
92120

93121
t.Fatal("Build did not complete within 30 seconds")
94122
}
95123

124+
func getQueuePos(pos *int) int {
125+
if pos == nil {
126+
return 0
127+
}
128+
return *pos
129+
}
130+
131+
func formatQueuePos(pos *int) string {
132+
if pos == nil {
133+
return "none"
134+
}
135+
return fmt.Sprintf("%d", *pos)
136+
}
137+
138+

0 commit comments

Comments
 (0)