github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/client/config/artifact_test.go (about) 1 package config 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/hashicorp/nomad/ci" 8 "github.com/hashicorp/nomad/helper/pointer" 9 "github.com/hashicorp/nomad/nomad/structs/config" 10 "github.com/shoenig/test/must" 11 ) 12 13 func TestArtifactConfigFromAgent(t *testing.T) { 14 ci.Parallel(t) 15 16 testCases := []struct { 17 name string 18 config *config.ArtifactConfig 19 exp *ArtifactConfig 20 expErr string 21 }{ 22 { 23 name: "from default", 24 config: config.DefaultArtifactConfig(), 25 exp: &ArtifactConfig{ 26 HTTPReadTimeout: 30 * time.Minute, 27 HTTPMaxBytes: 100_000_000_000, 28 GCSTimeout: 30 * time.Minute, 29 GitTimeout: 30 * time.Minute, 30 HgTimeout: 30 * time.Minute, 31 S3Timeout: 30 * time.Minute, 32 }, 33 }, 34 { 35 name: "invalid http read timeout", 36 config: &config.ArtifactConfig{ 37 HTTPReadTimeout: pointer.Of("invalid"), 38 HTTPMaxSize: pointer.Of("100GB"), 39 GCSTimeout: pointer.Of("30m"), 40 GitTimeout: pointer.Of("30m"), 41 HgTimeout: pointer.Of("30m"), 42 S3Timeout: pointer.Of("30m"), 43 }, 44 expErr: "error parsing HTTPReadTimeout", 45 }, 46 { 47 name: "invalid http max size", 48 config: &config.ArtifactConfig{ 49 HTTPReadTimeout: pointer.Of("30m"), 50 HTTPMaxSize: pointer.Of("invalid"), 51 GCSTimeout: pointer.Of("30m"), 52 GitTimeout: pointer.Of("30m"), 53 HgTimeout: pointer.Of("30m"), 54 S3Timeout: pointer.Of("30m"), 55 }, 56 expErr: "error parsing HTTPMaxSize", 57 }, 58 { 59 name: "invalid gcs timeout", 60 config: &config.ArtifactConfig{ 61 HTTPReadTimeout: pointer.Of("30m"), 62 HTTPMaxSize: pointer.Of("100GB"), 63 GCSTimeout: pointer.Of("invalid"), 64 GitTimeout: pointer.Of("30m"), 65 HgTimeout: pointer.Of("30m"), 66 S3Timeout: pointer.Of("30m"), 67 }, 68 expErr: "error parsing GCSTimeout", 69 }, 70 { 71 name: "invalid git timeout", 72 config: &config.ArtifactConfig{ 73 HTTPReadTimeout: pointer.Of("30m"), 74 HTTPMaxSize: pointer.Of("100GB"), 75 GCSTimeout: pointer.Of("30m"), 76 GitTimeout: pointer.Of("invalid"), 77 HgTimeout: pointer.Of("30m"), 78 S3Timeout: pointer.Of("30m"), 79 }, 80 expErr: "error parsing GitTimeout", 81 }, 82 { 83 name: "invalid hg timeout", 84 config: &config.ArtifactConfig{ 85 HTTPReadTimeout: pointer.Of("30m"), 86 HTTPMaxSize: pointer.Of("100GB"), 87 GCSTimeout: pointer.Of("30m"), 88 GitTimeout: pointer.Of("30m"), 89 HgTimeout: pointer.Of("invalid"), 90 S3Timeout: pointer.Of("30m"), 91 }, 92 expErr: "error parsing HgTimeout", 93 }, 94 { 95 name: "invalid s3 timeout", 96 config: &config.ArtifactConfig{ 97 HTTPReadTimeout: pointer.Of("30m"), 98 HTTPMaxSize: pointer.Of("100GB"), 99 GCSTimeout: pointer.Of("30m"), 100 GitTimeout: pointer.Of("30m"), 101 HgTimeout: pointer.Of("30m"), 102 S3Timeout: pointer.Of("invalid"), 103 }, 104 expErr: "error parsing S3Timeout", 105 }, 106 } 107 108 for _, tc := range testCases { 109 t.Run(tc.name, func(t *testing.T) { 110 got, err := ArtifactConfigFromAgent(tc.config) 111 112 if tc.expErr != "" { 113 must.Error(t, err) 114 must.StrContains(t, err.Error(), tc.expErr) 115 } else { 116 must.NoError(t, err) 117 must.Eq(t, tc.exp, got) 118 } 119 }) 120 } 121 } 122 123 func TestArtifactConfig_Copy(t *testing.T) { 124 ci.Parallel(t) 125 126 ac := &ArtifactConfig{ 127 HTTPReadTimeout: time.Minute, 128 HTTPMaxBytes: 1000, 129 GCSTimeout: 2 * time.Minute, 130 GitTimeout: time.Second, 131 HgTimeout: time.Hour, 132 S3Timeout: 5 * time.Minute, 133 DisableFilesystemIsolation: true, 134 SetEnvironmentVariables: "FOO,BAR", 135 } 136 137 // make sure values are copied. 138 configCopy := ac.Copy() 139 must.Eq(t, ac, configCopy) 140 141 // modify copy and make sure original doesn't change. 142 configCopy.HTTPReadTimeout = 5 * time.Minute 143 configCopy.HTTPMaxBytes = 2000 144 configCopy.GCSTimeout = 5 * time.Second 145 configCopy.GitTimeout = 3 * time.Second 146 configCopy.HgTimeout = 2 * time.Hour 147 configCopy.S3Timeout = 10 * time.Minute 148 configCopy.DisableFilesystemIsolation = false 149 configCopy.SetEnvironmentVariables = "BAZ" 150 151 must.Eq(t, &ArtifactConfig{ 152 HTTPReadTimeout: time.Minute, 153 HTTPMaxBytes: 1000, 154 GCSTimeout: 2 * time.Minute, 155 GitTimeout: time.Second, 156 HgTimeout: time.Hour, 157 S3Timeout: 5 * time.Minute, 158 DisableFilesystemIsolation: true, 159 SetEnvironmentVariables: "FOO,BAR", 160 }, ac) 161 }