Add integration test for history option

Parse the history output to locate the size fields and check
whether they are the correct format or not. Use Column name SIZE
to mark start and end indices of the size fields

Fixes #12578

Signed-off-by: Ankush Agarwal <ankushagarwal11@gmail.com>
This commit is contained in:
Ankush Agarwal 2015-04-20 21:47:56 -07:00
parent e3e1c2be42
commit 08150150bb
1 changed files with 39 additions and 0 deletions

View File

@ -3,6 +3,8 @@ package main
import (
"fmt"
"os/exec"
"regexp"
"strconv"
"strings"
"github.com/go-check/check"
@ -122,3 +124,40 @@ func (s *DockerSuite) TestHistoryImageWithComment(c *check.C) {
}
}
func (s *DockerSuite) TestHistoryHumanOptionFalse(c *check.C) {
out, _, _ := runCommandWithOutput(exec.Command(dockerBinary, "history", "--human=false", "busybox"))
lines := strings.Split(out, "\n")
sizeColumnRegex, _ := regexp.Compile("SIZE +")
indices := sizeColumnRegex.FindStringIndex(lines[0])
startIndex := indices[0]
endIndex := indices[1]
for i := 1; i < len(lines)-1; i++ {
if endIndex > len(lines[i]) {
endIndex = len(lines[i])
}
sizeString := lines[i][startIndex:endIndex]
if _, err := strconv.Atoi(strings.TrimSpace(sizeString)); err != nil {
c.Fatalf("The size '%s' was not an Integer", sizeString)
}
}
}
func (s *DockerSuite) TestHistoryHumanOptionTrue(c *check.C) {
out, _, _ := runCommandWithOutput(exec.Command(dockerBinary, "history", "--human=true", "busybox"))
lines := strings.Split(out, "\n")
sizeColumnRegex, _ := regexp.Compile("SIZE +")
humanSizeRegex, _ := regexp.Compile("^\\d+.*B$") // Matches human sizes like 10 MB, 3.2 KB, etc
indices := sizeColumnRegex.FindStringIndex(lines[0])
startIndex := indices[0]
endIndex := indices[1]
for i := 1; i < len(lines)-1; i++ {
if endIndex > len(lines[i]) {
endIndex = len(lines[i])
}
sizeString := lines[i][startIndex:endIndex]
if matchSuccess := humanSizeRegex.MatchString(strings.TrimSpace(sizeString)); !matchSuccess {
c.Fatalf("The size '%s' was not in human format", sizeString)
}
}
}