github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/drivers/docker/progress_test.go (about) 1 package docker 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/hashicorp/nomad/ci" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func Test_DockerImageProgressManager(t *testing.T) { 12 ci.Parallel(t) 13 14 pm := &imageProgressManager{ 15 imageProgress: &imageProgress{ 16 timestamp: time.Now(), 17 layers: make(map[string]*layerProgress), 18 }, 19 } 20 21 _, err := pm.Write([]byte(`{"status":"Pulling from library/golang","id":"1.9.5"} 22 {"status":"Pulling fs layer","progressDetail":{},"id":"c73ab1c6897b"} 23 {"status":"Pulling fs layer","progressDetail":{},"id":"1ab373b3deae"} 24 `)) 25 require.NoError(t, err) 26 require.Equal(t, 2, len(pm.imageProgress.layers), "number of layers should be 2") 27 28 cur := pm.imageProgress.currentBytes() 29 require.Zero(t, cur) 30 tot := pm.imageProgress.totalBytes() 31 require.Zero(t, tot) 32 33 _, err = pm.Write([]byte(`{"status":"Pulling fs layer","progress`)) 34 require.NoError(t, err) 35 require.Equal(t, 2, len(pm.imageProgress.layers), "number of layers should be 2") 36 37 _, err = pm.Write([]byte(`Detail":{},"id":"b542772b4177"}` + "\n")) 38 require.NoError(t, err) 39 require.Equal(t, 3, len(pm.imageProgress.layers), "number of layers should be 3") 40 41 _, err = pm.Write([]byte(`{"status":"Downloading","progressDetail":{"current":45800,"total":4335495},"progress":"[\u003e ] 45.8kB/4.335MB","id":"b542772b4177"} 42 {"status":"Downloading","progressDetail":{"current":113576,"total":11108010},"progress":"[\u003e ] 113.6kB/11.11MB","id":"1ab373b3deae"} 43 {"status":"Downloading","progressDetail":{"current":694257,"total":4335495},"progress":"[========\u003e ] 694.3kB/4.335MB","id":"b542772b4177"}` + "\n")) 44 require.NoError(t, err) 45 require.Equal(t, 3, len(pm.imageProgress.layers), "number of layers should be 3") 46 require.Equal(t, int64(807833), pm.imageProgress.currentBytes()) 47 require.Equal(t, int64(15443505), pm.imageProgress.totalBytes()) 48 49 _, err = pm.Write([]byte(`{"status":"Download complete","progressDetail":{},"id":"b542772b4177"}` + "\n")) 50 require.NoError(t, err) 51 require.Equal(t, 3, len(pm.imageProgress.layers), "number of layers should be 3") 52 require.Equal(t, int64(4449071), pm.imageProgress.currentBytes()) 53 require.Equal(t, int64(15443505), pm.imageProgress.totalBytes()) 54 }