github.com/AliyunContainerService/cli@v0.0.0-20181009023821-814ced4b30d0/cli/compose/schema/schema_test.go (about)

     1  package schema
     2  
     3  import (
     4  	"testing"
     5  
     6  	"gotest.tools/assert"
     7  )
     8  
     9  type dict map[string]interface{}
    10  
    11  func TestValidate(t *testing.T) {
    12  	config := dict{
    13  		"version": "3.0",
    14  		"services": dict{
    15  			"foo": dict{
    16  				"image": "busybox",
    17  			},
    18  		},
    19  	}
    20  
    21  	assert.NilError(t, Validate(config, "3.0"))
    22  }
    23  
    24  func TestValidateUndefinedTopLevelOption(t *testing.T) {
    25  	config := dict{
    26  		"version": "3.0",
    27  		"helicopters": dict{
    28  			"foo": dict{
    29  				"image": "busybox",
    30  			},
    31  		},
    32  	}
    33  
    34  	err := Validate(config, "3.0")
    35  	assert.ErrorContains(t, err, "Additional property helicopters is not allowed")
    36  }
    37  
    38  func TestValidateAllowsXTopLevelFields(t *testing.T) {
    39  	config := dict{
    40  		"version":       "3.4",
    41  		"x-extra-stuff": dict{},
    42  	}
    43  
    44  	err := Validate(config, "3.4")
    45  	assert.NilError(t, err)
    46  }
    47  
    48  func TestValidateAllowsXFields(t *testing.T) {
    49  	config := dict{
    50  		"version": "3.7",
    51  		"services": dict{
    52  			"bar": dict{
    53  				"x-extra-stuff": dict{},
    54  			},
    55  		},
    56  		"volumes": dict{
    57  			"bar": dict{
    58  				"x-extra-stuff": dict{},
    59  			},
    60  		},
    61  		"networks": dict{
    62  			"bar": dict{
    63  				"x-extra-stuff": dict{},
    64  			},
    65  		},
    66  		"configs": dict{
    67  			"bar": dict{
    68  				"x-extra-stuff": dict{},
    69  			},
    70  		},
    71  		"secrets": dict{
    72  			"bar": dict{
    73  				"x-extra-stuff": dict{},
    74  			},
    75  		},
    76  	}
    77  	err := Validate(config, "3.7")
    78  	assert.NilError(t, err)
    79  }
    80  
    81  func TestValidateSecretConfigNames(t *testing.T) {
    82  	config := dict{
    83  		"version": "3.5",
    84  		"configs": dict{
    85  			"bar": dict{
    86  				"name": "foobar",
    87  			},
    88  		},
    89  		"secrets": dict{
    90  			"baz": dict{
    91  				"name": "foobaz",
    92  			},
    93  		},
    94  	}
    95  
    96  	err := Validate(config, "3.5")
    97  	assert.NilError(t, err)
    98  }
    99  
   100  func TestValidateInvalidVersion(t *testing.T) {
   101  	config := dict{
   102  		"version": "2.1",
   103  		"services": dict{
   104  			"foo": dict{
   105  				"image": "busybox",
   106  			},
   107  		},
   108  	}
   109  
   110  	err := Validate(config, "2.1")
   111  	assert.ErrorContains(t, err, "unsupported Compose file version: 2.1")
   112  }
   113  
   114  type array []interface{}
   115  
   116  func TestValidatePlacement(t *testing.T) {
   117  	config := dict{
   118  		"version": "3.3",
   119  		"services": dict{
   120  			"foo": dict{
   121  				"image": "busybox",
   122  				"deploy": dict{
   123  					"placement": dict{
   124  						"preferences": array{
   125  							dict{
   126  								"spread": "node.labels.az",
   127  							},
   128  						},
   129  					},
   130  				},
   131  			},
   132  		},
   133  	}
   134  
   135  	assert.NilError(t, Validate(config, "3.3"))
   136  }
   137  
   138  func TestValidateIsolation(t *testing.T) {
   139  	config := dict{
   140  		"version": "3.5",
   141  		"services": dict{
   142  			"foo": dict{
   143  				"image":     "busybox",
   144  				"isolation": "some-isolation-value",
   145  			},
   146  		},
   147  	}
   148  	assert.NilError(t, Validate(config, "3.5"))
   149  }
   150  
   151  func TestValidateRollbackConfig(t *testing.T) {
   152  	config := dict{
   153  		"version": "3.4",
   154  		"services": dict{
   155  			"foo": dict{
   156  				"image": "busybox",
   157  				"deploy": dict{
   158  					"rollback_config": dict{
   159  						"parallelism": 1,
   160  					},
   161  				},
   162  			},
   163  		},
   164  	}
   165  
   166  	assert.NilError(t, Validate(config, "3.7"))
   167  }
   168  
   169  func TestValidateRollbackConfigWithOrder(t *testing.T) {
   170  	config := dict{
   171  		"version": "3.4",
   172  		"services": dict{
   173  			"foo": dict{
   174  				"image": "busybox",
   175  				"deploy": dict{
   176  					"rollback_config": dict{
   177  						"parallelism": 1,
   178  						"order":       "start-first",
   179  					},
   180  				},
   181  			},
   182  		},
   183  	}
   184  
   185  	assert.NilError(t, Validate(config, "3.7"))
   186  }
   187  
   188  func TestValidateRollbackConfigWithUpdateConfig(t *testing.T) {
   189  	config := dict{
   190  		"version": "3.4",
   191  		"services": dict{
   192  			"foo": dict{
   193  				"image": "busybox",
   194  				"deploy": dict{
   195  					"update_config": dict{
   196  						"parallelism": 1,
   197  						"order":       "start-first",
   198  					},
   199  					"rollback_config": dict{
   200  						"parallelism": 1,
   201  						"order":       "start-first",
   202  					},
   203  				},
   204  			},
   205  		},
   206  	}
   207  
   208  	assert.NilError(t, Validate(config, "3.7"))
   209  }
   210  
   211  func TestValidateRollbackConfigWithUpdateConfigFull(t *testing.T) {
   212  	config := dict{
   213  		"version": "3.4",
   214  		"services": dict{
   215  			"foo": dict{
   216  				"image": "busybox",
   217  				"deploy": dict{
   218  					"update_config": dict{
   219  						"parallelism":    1,
   220  						"order":          "start-first",
   221  						"delay":          "10s",
   222  						"failure_action": "pause",
   223  						"monitor":        "10s",
   224  					},
   225  					"rollback_config": dict{
   226  						"parallelism":    1,
   227  						"order":          "start-first",
   228  						"delay":          "10s",
   229  						"failure_action": "pause",
   230  						"monitor":        "10s",
   231  					},
   232  				},
   233  			},
   234  		},
   235  	}
   236  
   237  	assert.NilError(t, Validate(config, "3.7"))
   238  }