Pārlūkot izejas kodu

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>
Ankush Agarwal 10 gadi atpakaļ
vecāks
revīzija
08150150bb
1 mainītis faili ar 39 papildinājumiem un 0 dzēšanām
  1. 39 0
      integration-cli/docker_cli_history_test.go

+ 39 - 0
integration-cli/docker_cli_history_test.go

@@ -3,6 +3,8 @@ package main
 import (
 import (
 	"fmt"
 	"fmt"
 	"os/exec"
 	"os/exec"
+	"regexp"
+	"strconv"
 	"strings"
 	"strings"
 
 
 	"github.com/go-check/check"
 	"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)
+		}
+	}
+}