github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/agent/format-2.0_whitebox_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Copyright 2014 Cloudbase Solutions SRL 3 // Licensed under the AGPLv3, see LICENCE file for details. 4 5 // The format tests are white box tests, meaning that the tests are in the 6 // same package as the code, as all the format details are internal to the 7 // package. 8 9 package agent 10 11 import ( 12 "path/filepath" 13 "time" 14 15 jc "github.com/juju/testing/checkers" 16 "github.com/juju/utils/v3" 17 "github.com/juju/version/v2" 18 gc "gopkg.in/check.v1" 19 20 agentconstants "github.com/juju/juju/agent/constants" 21 "github.com/juju/juju/core/model" 22 "github.com/juju/juju/testing" 23 ) 24 25 type format_2_0Suite struct { 26 testing.BaseSuite 27 } 28 29 var _ = gc.Suite(&format_2_0Suite{}) 30 31 func (s *format_2_0Suite) TestStatePortNotParsedWithoutSecret(c *gc.C) { 32 dataDir := c.MkDir() 33 configPath := filepath.Join(dataDir, agentconstants.AgentConfigFilename) 34 err := utils.AtomicWriteFile(configPath, []byte(agentConfig2_0NotStateMachine), 0600) 35 c.Assert(err, jc.ErrorIsNil) 36 readConfig, err := ReadConfig(configPath) 37 c.Assert(err, jc.ErrorIsNil) 38 _, available := readConfig.StateServingInfo() 39 c.Assert(available, jc.IsFalse) 40 } 41 42 func (*format_2_0Suite) TestReadConfWithExisting2_0ConfigFileContents(c *gc.C) { 43 dataDir := c.MkDir() 44 configPath := filepath.Join(dataDir, agentconstants.AgentConfigFilename) 45 err := utils.AtomicWriteFile(configPath, []byte(agentConfig2_0Contents), 0600) 46 c.Assert(err, jc.ErrorIsNil) 47 48 config, err := ReadConfig(configPath) 49 c.Assert(err, jc.ErrorIsNil) 50 c.Assert(config.UpgradedToVersion(), jc.DeepEquals, version.MustParse("1.17.5.1")) 51 c.Assert(config.Jobs(), jc.DeepEquals, []model.MachineJob{model.JobManageModel}) 52 } 53 54 func (*format_2_0Suite) TestMarshalUnmarshal(c *gc.C) { 55 loggingConfig := "juju=INFO;unit=INFO" 56 config := newTestConfig(c) 57 // configFilePath is not serialized as it is the location of the file. 58 config.configFilePath = "" 59 60 config.SetLoggingConfig(loggingConfig) 61 62 data, err := format_2_0.marshal(config) 63 c.Assert(err, jc.ErrorIsNil) 64 newConfig, err := format_2_0.unmarshal(data) 65 c.Assert(err, jc.ErrorIsNil) 66 67 c.Check(newConfig, gc.DeepEquals, config) 68 c.Check(newConfig.LoggingConfig(), gc.Equals, loggingConfig) 69 } 70 71 func (*format_2_0Suite) TestQueryTracing(c *gc.C) { 72 config := newTestConfig(c) 73 // configFilePath is not serialized as it is the location of the file. 74 config.configFilePath = "" 75 76 config.SetQueryTracingEnabled(true) 77 config.SetQueryTracingThreshold(time.Second) 78 79 data, err := format_2_0.marshal(config) 80 c.Assert(err, jc.ErrorIsNil) 81 newConfig, err := format_2_0.unmarshal(data) 82 c.Assert(err, jc.ErrorIsNil) 83 84 c.Check(newConfig, gc.DeepEquals, config) 85 c.Check(newConfig.QueryTracingEnabled(), jc.IsTrue) 86 c.Check(newConfig.QueryTracingThreshold(), gc.Equals, time.Second) 87 } 88 89 var agentConfig2_0Contents = ` 90 # format 2.0 91 controller: controller-deadbeef-1bad-500d-9000-4b1d0d06f00d 92 model: model-deadbeef-0bad-400d-8000-4b1d0d06f00d 93 tag: machine-0 94 datadir: /home/user/.local/share/juju/local 95 logdir: /var/log/juju-user-local 96 nonce: user-admin:bootstrap 97 jobs: 98 - JobManageModel 99 upgradedToVersion: 1.17.5.1 100 cacert: '-----BEGIN CERTIFICATE----- 101 102 MIICWzCCAcagAwIBAgIBADALBgkqhkiG9w0BAQUwQzENMAsGA1UEChMEanVqdTEy 103 104 MDAGA1UEAwwpanVqdS1nZW5lcmF0ZWQgQ0EgZm9yIGVudmlyb25tZW50ICJsb2Nh 105 106 bCIwHhcNMTQwMzA1MTQxOTA3WhcNMjQwMzA1MTQyNDA3WjBDMQ0wCwYDVQQKEwRq 107 108 dWp1MTIwMAYDVQQDDClqdWp1LWdlbmVyYXRlZCBDQSBmb3IgZW52aXJvbm1lbnQg 109 110 ImxvY2FsIjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwHsKV7fKfmSQt2QL 111 112 P4+hrqQJhDTMifgNkIY9nTlLHegV5jl5XJ8lRYjZBXJEMz0AzW/RbrDElkn5+4Do 113 114 pIWPNDAT0eztXBvVwL6qQOUtiBsA7vHQJMQaLVAmZNKvrHyuhcoG+hpf8EMaLdbA 115 116 iCGKifs+Y0MFt5AeriVDH5lGlzcCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgCkMA8G 117 118 A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFB3Td3SP66UToZkOjVh3Wy8b6HR6MB8G 119 120 A1UdIwQYMBaAFB3Td3SP66UToZkOjVh3Wy8b6HR6MAsGCSqGSIb3DQEBBQOBgQB4 121 122 izvSRSpimi40aEOnZIsSMHVBiSCclpBg5cq7lGyiUSsDROTIbsRAKPBmrflB/qbf 123 124 J70rWFwh/d/5ssCAYrZviFL6WvpuLD3j3m4PYampNMmvJf2s6zVRIMotEY+bVwfU 125 126 z4jGaVpODac0i0bE0/Uh9qXK1UXcYY57vNNAgkaYAQ== 127 128 -----END CERTIFICATE----- 129 130 ' 131 stateaddresses: 132 - localhost:37017 133 statepassword: NB5imrDaWCCRW/4akSSvUxhX 134 apiaddresses: 135 - localhost:17071 136 apipassword: NB5imrDaWCCRW/4akSSvUxhX 137 oldpassword: oBlMbFUGvCb2PMFgYVzjS6GD 138 values: 139 AGENT_SERVICE_NAME: juju-agent-user-local 140 CONTAINER_TYPE: "" 141 NAMESPACE: user-local 142 PROVIDER_TYPE: local 143 STORAGE_ADDR: 10.0.3.1:8040 144 STORAGE_DIR: /home/user/.local/share/juju/local/storage 145 controllercert: '-----BEGIN CERTIFICATE----- 146 147 MIICNzCCAaKgAwIBAgIBADALBgkqhkiG9w0BAQUwQzENMAsGA1UEChMEanVqdTEy 148 149 MDAGA1UEAwwpanVqdS1nZW5lcmF0ZWQgQ0EgZm9yIGVudmlyb25tZW50ICJsb2Nh 150 151 bCIwHhcNMTQwMzA1MTQxOTE1WhcNMjQwMzA1MTQyNDE1WjAbMQ0wCwYDVQQKEwRq 152 153 dWp1MQowCAYDVQQDEwEqMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJnbuN 154 155 L3m/oY7Er2lEF6ye1SodepvpI0CLCdLwrYP52cRxbVzoD1jbXveclolg2xoUquga 156 157 qxsAhvVzzGaoLux1BoBD+G0N637fnY4XSIC9IuSkPOAdReKJkOvTL4nTjpzgfeHR 158 159 hRin6Xckvp96L4Prmki7sYQ8PG9Q7TBcOf4yowIDAQABo2cwZTAOBgNVHQ8BAf8E 160 161 BAMCAKgwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHQYDVR0OBBYEFE1MB3d+5BW+n066 162 163 lWcVkhta1etlMB8GA1UdIwQYMBaAFB3Td3SP66UToZkOjVh3Wy8b6HR6MAsGCSqG 164 165 SIb3DQEBBQOBgQBnsBvl3hfIQbHhAlqritDBCWGpaXywlHe4PvyVL3LZTLiAZ9a/ 166 167 BOSBfovs81sjUe5l60j+1vgRQgvT2Pnw6WGWmYWhSyxW7upEUl1LuZxnw3AVGVFO 168 169 r140iBNUtTfGUf3PmyBXHSotqgMime+rNSjl25qSoYwnuQXdFdCKJoutYg== 170 171 -----END CERTIFICATE----- 172 173 ' 174 controllerkey: '-----BEGIN RSA PRIVATE KEY----- 175 176 MIICXAIBAAKBgQDJnbuNL3m/oY7Er2lEF6ye1SodepvpI0CLCdLwrYP52cRxbVzo 177 178 D1jbXveclolg2xoUqugaqxsAhvVzzGaoLux1BoBD+G0N637fnY4XSIC9IuSkPOAd 179 180 ReKJkOvTL4nTjpzgfeHRhRin6Xckvp96L4Prmki7sYQ8PG9Q7TBcOf4yowIDAQAB 181 182 AoGASEtzETFQ6tI3q3dqu6vxjhLJw0BP381wO2sOZJcTl+fqdPHOOrgmGKN5DoE8 183 184 SarHM1oFWGq6h/nc0eUdenk4+CokpbKRgUU9hB1TKGYMbN3bUTKPOqTMHbnrhWdT 185 186 P/fqa+nXhvg7igMT3Rk7l9DsSxoYB5xZmiLaXqynVE5MNoECQQDRsgDDUrUOeMH6 187 188 1+GO+afb8beRzR8mnaBvja6XLlZB6SUcGet9bMgAiGH3arH6ARfNNsWrDAmvArah 189 190 SKeqRB5TAkEA9iMEQDkcybCmxu4Y3YLeQuT9r3h26QhQjc+eRINS/3ZLN+lxKnXG 191 192 N019ZUlsyL97lJBDzTMPsBqfXJ2pbqXwcQJBAJNLuPN63kl7E68zA3Ld9UYvBWY6 193 194 Mp56bJ7PZAs39kk4DuQtZNhmmBqfskkMPlZBfEmfJrxeqVKw0j56faPBU5cCQFYU 195 196 mP/8+VxwM2OPEZMmmaS7gR1E/BEznzh5S9iaNQSy0kuTkMhQuCnPJ/OsYiczEH08 197 198 lvnEyc/E/8bcPM09q4ECQCFwMWzw2Jx9VOBGm60yiOKIdLgdDZOY/tP0jigNCMJF 199 200 47/BJx3FCgW3io81a4KOc445LxgiPUJyyCNlY1dW70o= 201 202 -----END RSA PRIVATE KEY----- 203 204 ' 205 caprivatekey: '-----BEGIN RSA PRIVATE KEY----- 206 207 MIICXAIBAAKBgQDJnbuNL3m/oY7Er2lEF6ye1SodepvpI0CLCdLwrYP52cRxbVzo 208 209 D1jbXveclolg2xoUqugaqxsAhvVzzGaoLux1BoBD+G0N637fnY4XSIC9IuSkPOAd 210 211 ReKJkOvTL4nTjpzgfeHRhRin6Xckvp96L4Prmki7sYQ8PG9Q7TBcOf4yowIDAQAB 212 213 AoGASEtzETFQ6tI3q3dqu6vxjhLJw0BP381wO2sOZJcTl+fqdPHOOrgmGKN5DoE8 214 215 SarHM1oFWGq6h/nc0eUdenk4+CokpbKRgUU9hB1TKGYMbN3bUTKPOqTMHbnrhWdT 216 217 P/fqa+nXhvg7igMT3Rk7l9DsSxoYB5xZmiLaXqynVE5MNoECQQDRsgDDUrUOeMH6 218 219 1+GO+afb8beRzR8mnaBvja6XLlZB6SUcGet9bMgAiGH3arH6ARfNNsWrDAmvArah 220 221 SKeqRB5TAkEA9iMEQDkcybCmxu4Y3YLeQuT9r3h26QhQjc+eRINS/3ZLN+lxKnXG 222 223 N019ZUlsyL97lJBDzTMPsBqfXJ2pbqXwcQJBAJNLuPN63kl7E68zA3Ld9UYvBWY6 224 225 Mp56bJ7PZAs39kk4DuQtZNhmmBqfskkMPlZBfEmfJrxeqVKw0j56faPBU5cCQFYU 226 227 mP/8+VxwM2OPEZMmmaS7gR1E/BEznzh5S9iaNQSy0kuTkMhQuCnPJ/OsYiczEH08 228 229 lvnEyc/E/8bcPM09q4ECQCFwMWzw2Jx9VOBGm60yiOKIdLgdDZOY/tP0jigNCMJF 230 231 47/BJx3FCgW3io81a4KOc445LxgiPUJyyCNlY1dW70o= 232 233 -----END RSA PRIVATE KEY----- 234 235 ' 236 apiport: 17070 237 controllerapiport: 17071 238 `[1:] 239 240 var agentConfig2_0NotStateMachine = ` 241 # format 2.0 242 controller: controller-deadbeef-1bad-500d-9000-4b1d0d06f00d 243 model: model-deadbeef-0bad-400d-8000-4b1d0d06f00d 244 tag: machine-1 245 datadir: /home/user/.local/share/juju/local 246 logdir: /var/log/juju-user-local 247 nonce: user-admin:bootstrap 248 jobs: 249 - JobManageModel 250 upgradedToVersion: 1.17.5.1 251 cacert: '-----BEGIN CERTIFICATE----- 252 253 MIICWzCCAcagAwIBAgIBADALBgkqhkiG9w0BAQUwQzENMAsGA1UEChMEanVqdTEy 254 255 MDAGA1UEAwwpanVqdS1nZW5lcmF0ZWQgQ0EgZm9yIGVudmlyb25tZW50ICJsb2Nh 256 257 bCIwHhcNMTQwMzA1MTQxOTA3WhcNMjQwMzA1MTQyNDA3WjBDMQ0wCwYDVQQKEwRq 258 259 dWp1MTIwMAYDVQQDDClqdWp1LWdlbmVyYXRlZCBDQSBmb3IgZW52aXJvbm1lbnQg 260 261 ImxvY2FsIjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwHsKV7fKfmSQt2QL 262 263 P4+hrqQJhDTMifgNkIY9nTlLHegV5jl5XJ8lRYjZBXJEMz0AzW/RbrDElkn5+4Do 264 265 pIWPNDAT0eztXBvVwL6qQOUtiBsA7vHQJMQaLVAmZNKvrHyuhcoG+hpf8EMaLdbA 266 267 iCGKifs+Y0MFt5AeriVDH5lGlzcCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgCkMA8G 268 269 A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFB3Td3SP66UToZkOjVh3Wy8b6HR6MB8G 270 271 A1UdIwQYMBaAFB3Td3SP66UToZkOjVh3Wy8b6HR6MAsGCSqGSIb3DQEBBQOBgQB4 272 273 izvSRSpimi40aEOnZIsSMHVBiSCclpBg5cq7lGyiUSsDROTIbsRAKPBmrflB/qbf 274 275 J70rWFwh/d/5ssCAYrZviFL6WvpuLD3j3m4PYampNMmvJf2s6zVRIMotEY+bVwfU 276 277 z4jGaVpODac0i0bE0/Uh9qXK1UXcYY57vNNAgkaYAQ== 278 279 -----END CERTIFICATE----- 280 281 ' 282 stateaddresses: 283 - localhost:37017 284 statepassword: NB5imrDaWCCRW/4akSSvUxhX 285 apiaddresses: 286 - localhost:17070 287 apipassword: NB5imrDaWCCRW/4akSSvUxhX 288 oldpassword: oBlMbFUGvCb2PMFgYVzjS6GD 289 values: 290 AGENT_SERVICE_NAME: juju-agent-user-local 291 CONTAINER_TYPE: "" 292 MONGO_SERVICE_NAME: juju-db-user-local 293 NAMESPACE: user-local 294 PROVIDER_TYPE: local 295 STORAGE_ADDR: 10.0.3.1:8040 296 STORAGE_DIR: /home/user/.local/share/juju/local/storage 297 apiport: 17070 298 `[1:]