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  }