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  }