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:]