Skip to content

Commit df05870

Browse files
cezarsaandrestc
authored andcommitted
testing: fix image tag and inspect using image id instead of name
1 parent f3d2516 commit df05870

File tree

2 files changed

+89
-12
lines changed

2 files changed

+89
-12
lines changed

testing/server.go

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,21 +1021,19 @@ func (s *DockerServer) pushImage(w http.ResponseWriter, r *http.Request) {
10211021

10221022
func (s *DockerServer) tagImage(w http.ResponseWriter, r *http.Request) {
10231023
name := mux.Vars(r)["name"]
1024-
s.iMut.RLock()
1025-
if _, ok := s.imgIDs[name]; !ok {
1026-
s.iMut.RUnlock()
1024+
id, err := s.findImage(name)
1025+
if err != nil {
10271026
http.Error(w, "No such image", http.StatusNotFound)
10281027
return
10291028
}
1030-
s.iMut.RUnlock()
10311029
s.iMut.Lock()
10321030
defer s.iMut.Unlock()
10331031
newRepo := r.URL.Query().Get("repo")
10341032
newTag := r.URL.Query().Get("tag")
10351033
if newTag != "" {
10361034
newRepo += ":" + newTag
10371035
}
1038-
s.imgIDs[newRepo] = s.imgIDs[name]
1036+
s.imgIDs[newRepo] = id
10391037
w.WriteHeader(http.StatusCreated)
10401038
}
10411039

@@ -1075,13 +1073,14 @@ func (s *DockerServer) inspectImage(w http.ResponseWriter, r *http.Request) {
10751073
s.iMut.RLock()
10761074
defer s.iMut.RUnlock()
10771075
if id, ok := s.imgIDs[name]; ok {
1078-
for _, img := range s.images {
1079-
if img.ID == id {
1080-
w.Header().Set("Content-Type", "application/json")
1081-
w.WriteHeader(http.StatusOK)
1082-
json.NewEncoder(w).Encode(img)
1083-
return
1084-
}
1076+
name = id
1077+
}
1078+
for _, img := range s.images {
1079+
if img.ID == name {
1080+
w.Header().Set("Content-Type", "application/json")
1081+
w.WriteHeader(http.StatusOK)
1082+
json.NewEncoder(w).Encode(img)
1083+
return
10851084
}
10861085
}
10871086
http.Error(w, "not found", http.StatusNotFound)

testing/server_test.go

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1408,6 +1408,21 @@ func TestTagImageWithRepoAndTag(t *testing.T) {
14081408
}
14091409
}
14101410

1411+
func TestTagImageWithID(t *testing.T) {
1412+
t.Parallel()
1413+
server := DockerServer{images: []docker.Image{{ID: "myimgid"}}, imgIDs: make(map[string]string)}
1414+
server.buildMuxer()
1415+
recorder := httptest.NewRecorder()
1416+
request, _ := http.NewRequest("POST", "/images/myimgid/tag?repo=tsuru/new-python", nil)
1417+
server.ServeHTTP(recorder, request)
1418+
if recorder.Code != http.StatusCreated {
1419+
t.Errorf("TagImage: wrong status. Want %d. Got %d.", http.StatusCreated, recorder.Code)
1420+
}
1421+
if server.imgIDs["tsuru/new-python"] != "myimgid" {
1422+
t.Errorf("TagImage: did not tag the image")
1423+
}
1424+
}
1425+
14111426
func TestTagImageNotFound(t *testing.T) {
14121427
t.Parallel()
14131428
server := DockerServer{}
@@ -1420,6 +1435,69 @@ func TestTagImageNotFound(t *testing.T) {
14201435
}
14211436
}
14221437

1438+
func TestInspectImage(t *testing.T) {
1439+
t.Parallel()
1440+
server := DockerServer{
1441+
imgIDs: map[string]string{"tsuru/python": "a123"},
1442+
images: []docker.Image{{ID: "a123", Author: "me"}},
1443+
}
1444+
server.buildMuxer()
1445+
recorder := httptest.NewRecorder()
1446+
request, _ := http.NewRequest("GET", "/images/tsuru/python/json", nil)
1447+
server.ServeHTTP(recorder, request)
1448+
if recorder.Code != http.StatusOK {
1449+
t.Errorf("InspectImage: wrong status. Want %d. Got %d.", http.StatusOK, recorder.Code)
1450+
}
1451+
var img docker.Image
1452+
err := json.NewDecoder(recorder.Body).Decode(&img)
1453+
if err != nil {
1454+
t.Fatal(err)
1455+
}
1456+
expected := docker.Image{
1457+
ID: "a123",
1458+
Author: "me",
1459+
}
1460+
if !reflect.DeepEqual(img, expected) {
1461+
t.Errorf("InspectImage: wrong image returned, expected %#v, got: %#v", expected, img)
1462+
}
1463+
}
1464+
1465+
func TestInspectImageWithID(t *testing.T) {
1466+
t.Parallel()
1467+
server := DockerServer{images: []docker.Image{{ID: "myimgid", Author: "me"}}, imgIDs: make(map[string]string)}
1468+
server.buildMuxer()
1469+
recorder := httptest.NewRecorder()
1470+
request, _ := http.NewRequest("GET", "/images/myimgid/json", nil)
1471+
server.ServeHTTP(recorder, request)
1472+
if recorder.Code != http.StatusOK {
1473+
t.Errorf("InspectImage: wrong status. Want %d. Got %d.", http.StatusOK, recorder.Code)
1474+
}
1475+
var img docker.Image
1476+
err := json.NewDecoder(recorder.Body).Decode(&img)
1477+
if err != nil {
1478+
t.Fatal(err)
1479+
}
1480+
expected := docker.Image{
1481+
ID: "myimgid",
1482+
Author: "me",
1483+
}
1484+
if !reflect.DeepEqual(img, expected) {
1485+
t.Errorf("InspectImage: wrong image returned, expected %#v, got: %#v", expected, img)
1486+
}
1487+
}
1488+
1489+
func TestInspectImageNotFound(t *testing.T) {
1490+
t.Parallel()
1491+
server := DockerServer{}
1492+
server.buildMuxer()
1493+
recorder := httptest.NewRecorder()
1494+
request, _ := http.NewRequest("GET", "/images/tsuru/python/json", nil)
1495+
server.ServeHTTP(recorder, request)
1496+
if recorder.Code != http.StatusNotFound {
1497+
t.Errorf("InspectImage: wrong status. Want %d. Got %d.", http.StatusNotFound, recorder.Code)
1498+
}
1499+
}
1500+
14231501
func addContainers(server *DockerServer, n int) {
14241502
server.cMut.Lock()
14251503
defer server.cMut.Unlock()

0 commit comments

Comments
 (0)