zotregistry.dev/zot@v1.4.4-0.20240314164342-eec277e14d20/pkg/compliance/v1_0_0/check_test.go (about) 1 package v1_0_0_test 2 3 import ( 4 "context" 5 "net/http" 6 "os" 7 "testing" 8 "time" 9 10 "gopkg.in/resty.v1" 11 12 "zotregistry.dev/zot/pkg/api" 13 "zotregistry.dev/zot/pkg/api/config" 14 "zotregistry.dev/zot/pkg/compliance" 15 "zotregistry.dev/zot/pkg/compliance/v1_0_0" 16 . "zotregistry.dev/zot/pkg/test/common" 17 ) 18 19 //nolint:gochecknoglobals 20 var ( 21 listenAddress = "127.0.0.1" 22 defaultDir = "" 23 firstDir = "" 24 secondDir = "" 25 ) 26 27 func TestWorkflows(t *testing.T) { 28 ctrl, randomPort := startServer(t) 29 defer stopServer(ctrl) 30 31 storageInfo := []string{defaultDir, firstDir, secondDir} 32 33 v1_0_0.CheckWorkflows(t, &compliance.Config{ 34 Address: listenAddress, 35 Port: randomPort, 36 StorageInfo: storageInfo, 37 }) 38 } 39 40 func TestWorkflowsOutputJSON(t *testing.T) { 41 ctrl, randomPort := startServer(t) 42 defer stopServer(ctrl) 43 44 storageInfo := []string{defaultDir, firstDir, secondDir} 45 46 v1_0_0.CheckWorkflows(t, &compliance.Config{ 47 Address: listenAddress, 48 Port: randomPort, 49 OutputJSON: true, 50 StorageInfo: storageInfo, 51 }) 52 } 53 54 // start local server on random open port. 55 func startServer(t *testing.T) (*api.Controller, string) { 56 t.Helper() 57 58 port := GetFreePort() 59 baseURL := GetBaseURL(port) 60 conf := config.New() 61 conf.HTTP.Address = listenAddress 62 conf.HTTP.Port = port 63 ctrl := api.NewController(conf) 64 65 dir := t.TempDir() 66 defaultDir = dir 67 68 firstSubDir := t.TempDir() 69 firstDir = firstSubDir 70 71 secondSubDir := t.TempDir() 72 secondDir = secondSubDir 73 74 subPaths := make(map[string]config.StorageConfig) 75 76 subPaths["/firsttest"] = config.StorageConfig{RootDirectory: firstSubDir} 77 subPaths["/secondtest"] = config.StorageConfig{RootDirectory: secondSubDir} 78 79 ctrl.Config.Storage.RootDirectory = dir 80 81 ctrl.Config.Storage.SubPaths = subPaths 82 83 go func() { 84 if err := ctrl.Init(); err != nil { 85 return 86 } 87 88 // this blocks 89 if err := ctrl.Run(); err != nil { 90 return 91 } 92 }() 93 94 for { 95 // poll until ready 96 resp, _ := resty.R().Get(baseURL) 97 if resp.StatusCode() == http.StatusNotFound { 98 break 99 } 100 101 time.Sleep(100 * time.Millisecond) 102 } 103 104 return ctrl, port 105 } 106 107 func stopServer(ctrl *api.Controller) { 108 err := ctrl.Server.Shutdown(context.Background()) 109 if err != nil { 110 panic(err) 111 } 112 113 err = os.RemoveAll(ctrl.Config.Storage.RootDirectory) 114 if err != nil { 115 panic(err) 116 } 117 }