| 
									
										
										
										
											2016-09-10 17:23:28 +08:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2017-01-19 04:24:34 +08:00
										 |  |  |  * Minio Cloud Storage, (C) 2016, 2017 Minio, Inc. | 
					
						
							| 
									
										
										
										
											2016-09-10 17:23:28 +08:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  |  * you may not use this file except in compliance with the License. | 
					
						
							|  |  |  |  * You may obtain a copy of the License at | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *     http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  |  * distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  |  * See the License for the specific language governing permissions and | 
					
						
							|  |  |  |  * limitations under the License. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | package cmd | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 	"io/ioutil" | 
					
						
							| 
									
										
										
										
											2017-02-28 06:59:53 +08:00
										 |  |  | 	"os" | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 	"path/filepath" | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | 	"reflect" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/tidwall/gjson" | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestServerConfig(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2017-01-19 04:24:34 +08:00
										 |  |  | 	rootPath, err := newTestConfig(globalMinioDefaultRegion) | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Fatalf("Init Test config failed") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-11-10 15:37:12 +08:00
										 |  |  | 	// remove the root directory after the test ends.
 | 
					
						
							| 
									
										
										
										
											2017-08-13 10:25:43 +08:00
										 |  |  | 	defer os.RemoveAll(rootPath) | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	if globalServerConfig.GetRegion() != globalMinioDefaultRegion { | 
					
						
							|  |  |  | 		t.Errorf("Expecting region `us-east-1` found %s", globalServerConfig.GetRegion()) | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Set new region and verify.
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	globalServerConfig.SetRegion("us-west-1") | 
					
						
							|  |  |  | 	if globalServerConfig.GetRegion() != "us-west-1" { | 
					
						
							|  |  |  | 		t.Errorf("Expecting region `us-west-1` found %s", globalServerConfig.GetRegion()) | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Set new amqp notification id.
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	globalServerConfig.Notify.SetAMQPByID("2", amqpNotify{}) | 
					
						
							|  |  |  | 	savedNotifyCfg1 := globalServerConfig.Notify.GetAMQPByID("2") | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | 	if !reflect.DeepEqual(savedNotifyCfg1, amqpNotify{}) { | 
					
						
							|  |  |  | 		t.Errorf("Expecting AMQP config %#v found %#v", amqpNotify{}, savedNotifyCfg1) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Set new elastic search notification id.
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	globalServerConfig.Notify.SetElasticSearchByID("2", elasticSearchNotify{}) | 
					
						
							|  |  |  | 	savedNotifyCfg2 := globalServerConfig.Notify.GetElasticSearchByID("2") | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | 	if !reflect.DeepEqual(savedNotifyCfg2, elasticSearchNotify{}) { | 
					
						
							|  |  |  | 		t.Errorf("Expecting Elasticsearch config %#v found %#v", elasticSearchNotify{}, savedNotifyCfg2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Set new redis notification id.
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	globalServerConfig.Notify.SetRedisByID("2", redisNotify{}) | 
					
						
							|  |  |  | 	savedNotifyCfg3 := globalServerConfig.Notify.GetRedisByID("2") | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | 	if !reflect.DeepEqual(savedNotifyCfg3, redisNotify{}) { | 
					
						
							|  |  |  | 		t.Errorf("Expecting Redis config %#v found %#v", redisNotify{}, savedNotifyCfg3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-16 00:23:48 +08:00
										 |  |  | 	// Set new kafka notification id.
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	globalServerConfig.Notify.SetKafkaByID("2", kafkaNotify{}) | 
					
						
							|  |  |  | 	savedNotifyCfg4 := globalServerConfig.Notify.GetKafkaByID("2") | 
					
						
							| 
									
										
										
										
											2016-12-16 00:23:48 +08:00
										 |  |  | 	if !reflect.DeepEqual(savedNotifyCfg4, kafkaNotify{}) { | 
					
						
							|  |  |  | 		t.Errorf("Expecting Kafka config %#v found %#v", kafkaNotify{}, savedNotifyCfg4) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-10 06:22:10 +08:00
										 |  |  | 	// Set new Webhook notification id.
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	globalServerConfig.Notify.SetWebhookByID("2", webhookNotify{}) | 
					
						
							|  |  |  | 	savedNotifyCfg5 := globalServerConfig.Notify.GetWebhookByID("2") | 
					
						
							| 
									
										
										
										
											2017-01-10 06:22:10 +08:00
										 |  |  | 	if !reflect.DeepEqual(savedNotifyCfg5, webhookNotify{}) { | 
					
						
							| 
									
										
										
										
											2017-03-18 00:29:17 +08:00
										 |  |  | 		t.Errorf("Expecting Webhook config %#v found %#v", webhookNotify{}, savedNotifyCfg5) | 
					
						
							| 
									
										
										
										
											2017-01-10 06:22:10 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-15 08:27:03 +08:00
										 |  |  | 	// Set new MySQL notification id.
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	globalServerConfig.Notify.SetMySQLByID("2", mySQLNotify{}) | 
					
						
							|  |  |  | 	savedNotifyCfg6 := globalServerConfig.Notify.GetMySQLByID("2") | 
					
						
							| 
									
										
										
										
											2017-03-18 00:29:17 +08:00
										 |  |  | 	if !reflect.DeepEqual(savedNotifyCfg6, mySQLNotify{}) { | 
					
						
							|  |  |  | 		t.Errorf("Expecting Webhook config %#v found %#v", mySQLNotify{}, savedNotifyCfg6) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-15 08:27:03 +08:00
										 |  |  | 	// Set new MQTT notification id.
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	globalServerConfig.Notify.SetMQTTByID("2", mqttNotify{}) | 
					
						
							|  |  |  | 	savedNotifyCfg7 := globalServerConfig.Notify.GetMQTTByID("2") | 
					
						
							| 
									
										
										
										
											2017-06-15 08:27:03 +08:00
										 |  |  | 	if !reflect.DeepEqual(savedNotifyCfg7, mqttNotify{}) { | 
					
						
							|  |  |  | 		t.Errorf("Expecting Webhook config %#v found %#v", mqttNotify{}, savedNotifyCfg7) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | 	// Match version.
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	if globalServerConfig.GetVersion() != serverConfigVersion { | 
					
						
							|  |  |  | 		t.Errorf("Expecting version %s found %s", globalServerConfig.GetVersion(), serverConfigVersion) | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Attempt to save.
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	if err := globalServerConfig.Save(); err != nil { | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | 		t.Fatalf("Unable to save updated config file %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Do this only once here.
 | 
					
						
							| 
									
										
										
										
											2017-03-03 06:21:30 +08:00
										 |  |  | 	setConfigDir(rootPath) | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Initialize server config.
 | 
					
						
							| 
									
										
										
										
											2017-03-31 02:21:19 +08:00
										 |  |  | 	if err := loadConfig(); err != nil { | 
					
						
							| 
									
										
										
										
											2016-09-10 15:51:25 +08:00
										 |  |  | 		t.Fatalf("Unable to initialize from updated config file %s", err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-02-28 06:59:53 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func TestServerConfigWithEnvs(t *testing.T) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	os.Setenv("MINIO_BROWSER", "off") | 
					
						
							|  |  |  | 	defer os.Unsetenv("MINIO_BROWSER") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	os.Setenv("MINIO_ACCESS_KEY", "minio") | 
					
						
							|  |  |  | 	defer os.Unsetenv("MINIO_ACCESS_KEY") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	os.Setenv("MINIO_SECRET_KEY", "minio123") | 
					
						
							|  |  |  | 	defer os.Unsetenv("MINIO_SECRET_KEY") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-10 01:44:10 +08:00
										 |  |  | 	os.Setenv("MINIO_REGION", "us-west-1") | 
					
						
							|  |  |  | 	defer os.Unsetenv("MINIO_REGION") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-15 08:56:24 +08:00
										 |  |  | 	os.Setenv("MINIO_DOMAIN", "domain.com") | 
					
						
							|  |  |  | 	defer os.Unsetenv("MINIO_DOMAIN") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-10 01:44:10 +08:00
										 |  |  | 	defer resetGlobalIsEnvs() | 
					
						
							| 
									
										
										
										
											2017-02-28 06:59:53 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Get test root.
 | 
					
						
							|  |  |  | 	rootPath, err := getTestRoot() | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Error(err) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-31 02:21:19 +08:00
										 |  |  | 	serverHandleEnvVars() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-28 06:59:53 +08:00
										 |  |  | 	// Do this only once here.
 | 
					
						
							| 
									
										
										
										
											2017-03-03 06:21:30 +08:00
										 |  |  | 	setConfigDir(rootPath) | 
					
						
							| 
									
										
										
										
											2017-02-28 06:59:53 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Init config
 | 
					
						
							|  |  |  | 	initConfig() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// remove the root directory after the test ends.
 | 
					
						
							| 
									
										
										
										
											2017-08-13 10:25:43 +08:00
										 |  |  | 	defer os.RemoveAll(rootPath) | 
					
						
							| 
									
										
										
										
											2017-02-28 06:59:53 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Check if serverConfig has
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	if globalServerConfig.GetBrowser() { | 
					
						
							|  |  |  | 		t.Errorf("Expecting browser is set to false found %v", globalServerConfig.GetBrowser()) | 
					
						
							| 
									
										
										
										
											2017-02-28 06:59:53 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-10 01:44:10 +08:00
										 |  |  | 	// Check if serverConfig has
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	if globalServerConfig.GetRegion() != "us-west-1" { | 
					
						
							|  |  |  | 		t.Errorf("Expecting region to be \"us-west-1\" found %v", globalServerConfig.GetRegion()) | 
					
						
							| 
									
										
										
										
											2017-04-10 01:44:10 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-28 06:59:53 +08:00
										 |  |  | 	// Check if serverConfig has
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	cred := globalServerConfig.GetCredential() | 
					
						
							| 
									
										
										
										
											2017-02-28 06:59:53 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if cred.AccessKey != "minio" { | 
					
						
							|  |  |  | 		t.Errorf("Expecting access key to be `minio` found %s", cred.AccessKey) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if cred.SecretKey != "minio123" { | 
					
						
							|  |  |  | 		t.Errorf("Expecting access key to be `minio123` found %s", cred.SecretKey) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-04-10 01:44:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	if globalServerConfig.Domain != "domain.com" { | 
					
						
							|  |  |  | 		t.Errorf("Expecting Domain to be `domain.com` found " + globalServerConfig.Domain) | 
					
						
							| 
									
										
										
										
											2017-11-15 08:56:24 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-02-28 06:59:53 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | func TestCheckDupJSONKeys(t *testing.T) { | 
					
						
							|  |  |  | 	testCases := []struct { | 
					
						
							|  |  |  | 		json       string | 
					
						
							|  |  |  | 		shouldPass bool | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		{`{}`, true}, | 
					
						
							|  |  |  | 		{`{"version" : "13"}`, true}, | 
					
						
							|  |  |  | 		{`{"version" : "13", "version": "14"}`, false}, | 
					
						
							|  |  |  | 		{`{"version" : "13", "credential": {"accessKey": "12345"}}`, true}, | 
					
						
							|  |  |  | 		{`{"version" : "13", "credential": {"accessKey": "12345", "accessKey":"12345"}}`, false}, | 
					
						
							|  |  |  | 		{`{"version" : "13", "notify": {"amqp": {"1"}, "webhook":{"3"}}}`, true}, | 
					
						
							|  |  |  | 		{`{"version" : "13", "notify": {"amqp": {"1"}, "amqp":{"3"}}}`, false}, | 
					
						
							|  |  |  | 		{`{"version" : "13", "notify": {"amqp": {"1":{}, "2":{}}}}`, true}, | 
					
						
							|  |  |  | 		{`{"version" : "13", "notify": {"amqp": {"1":{}, "1":{}}}}`, false}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for i, testCase := range testCases { | 
					
						
							|  |  |  | 		err := doCheckDupJSONKeys(gjson.Result{}, gjson.Parse(testCase.json)) | 
					
						
							|  |  |  | 		if testCase.shouldPass && err != nil { | 
					
						
							|  |  |  | 			t.Errorf("Test %d, should pass but it failed with err = %v", i+1, err) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if !testCase.shouldPass && err == nil { | 
					
						
							|  |  |  | 			t.Errorf("Test %d, should fail but it succeed.", i+1) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-17 02:06:17 +08:00
										 |  |  | // Tests config validator..
 | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | func TestValidateConfig(t *testing.T) { | 
					
						
							|  |  |  | 	rootPath, err := newTestConfig(globalMinioDefaultRegion) | 
					
						
							|  |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Fatalf("Init Test config failed") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-03-17 02:06:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 	// remove the root directory after the test ends.
 | 
					
						
							| 
									
										
										
										
											2017-08-13 10:25:43 +08:00
										 |  |  | 	defer os.RemoveAll(rootPath) | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	configPath := filepath.Join(rootPath, minioConfigFile) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-30 05:12:47 +08:00
										 |  |  | 	v := serverConfigVersion | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	testCases := []struct { | 
					
						
							|  |  |  | 		configData string | 
					
						
							|  |  |  | 		shouldPass bool | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		// Test 1 - wrong json
 | 
					
						
							|  |  |  | 		{`{`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Test 2 - empty json
 | 
					
						
							|  |  |  | 		{`{}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Test 3 - wrong config version
 | 
					
						
							|  |  |  | 		{`{"version": "10"}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Test 4 - wrong browser parameter
 | 
					
						
							|  |  |  | 		{`{"version": "` + v + `", "browser": "foo"}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Test 5 - missing credential
 | 
					
						
							|  |  |  | 		{`{"version": "` + v + `", "browser": "on"}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Test 6 - missing secret key
 | 
					
						
							|  |  |  | 		{`{"version": "` + v + `", "browser": "on", "credential" : {"accessKey":"minio", "secretKey":""}}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-17 02:06:17 +08:00
										 |  |  | 		// Test 7 - missing region should pass, defaults to 'us-east-1'.
 | 
					
						
							|  |  |  | 		{`{"version": "` + v + `", "browser": "on", "credential" : {"accessKey":"minio", "secretKey":"minio123"}}`, true}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Test 8 - missing browser should pass, defaults to 'on'.
 | 
					
						
							|  |  |  | 		{`{"version": "` + v + `", "region": "us-east-1", "credential" : {"accessKey":"minio", "secretKey":"minio123"}}`, true}, | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-17 02:06:17 +08:00
										 |  |  | 		// Test 9 - success
 | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 		{`{"version": "` + v + `", "browser": "on", "region":"us-east-1", "credential" : {"accessKey":"minio", "secretKey":"minio123"}}`, true}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-17 02:06:17 +08:00
										 |  |  | 		// Test 10 - duplicated json keys
 | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 		{`{"version": "` + v + `", "browser": "on", "browser": "on", "region":"us-east-1", "credential" : {"accessKey":"minio", "secretKey":"minio123"}}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 11 - Test AMQP
 | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "amqp": { "1": { "enable": true, "url": "", "exchange": "", "routingKey": "", "exchangeType": "", "mandatory": false, "immediate": false, "durable": false, "internal": false, "noWait": false, "autoDeleted": false }}}}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 12 - Test NATS
 | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "nats": { "1": { "enable": true, "address": "", "subject": "", "username": "", "password": "", "token": "", "secure": false, "pingInterval": 0, "streaming": { "enable": false, "clusterID": "", "clientID": "", "async": false, "maxPubAcksInflight": 0 } } }}}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 13 - Test ElasticSearch
 | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "elasticsearch": { "1": { "enable": true, "url": "", "index": "" } }}}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 14 - Test Redis
 | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "redis": { "1": { "enable": true, "address": "", "password": "", "key": "" } }}}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 15 - Test PostgreSQL
 | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "postgresql": { "1": { "enable": true, "connectionString": "", "table": "", "host": "", "port": "", "user": "", "password": "", "database": "" }}}}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 16 - Test Kafka
 | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "kafka": { "1": { "enable": true, "brokers": null, "topic": "" } }}}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 17 - Test Webhook
 | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "webhook": { "1": { "enable": true, "endpoint": "" } }}}`, false}, | 
					
						
							| 
									
										
										
										
											2017-03-18 00:29:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 18 - Test MySQL
 | 
					
						
							| 
									
										
										
										
											2017-03-18 00:29:17 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "mysql": { "1": { "enable": true, "dsnString": "",  "table": "", "host": "", "port": "", "user": "", "password": "", "database": "" }}}}`, false}, | 
					
						
							| 
									
										
										
										
											2017-03-28 02:27:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 19 - Test Format for MySQL
 | 
					
						
							| 
									
										
										
										
											2017-03-28 02:27:25 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "mysql": { "1": { "enable": true, "dsnString": "",  "format": "invalid", "table": "xxx", "host": "10.0.0.1", "port": "3306", "user": "abc", "password": "pqr", "database": "test1" }}}}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 20 - Test valid Format for MySQL
 | 
					
						
							| 
									
										
										
										
											2017-03-28 02:27:25 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "mysql": { "1": { "enable": true, "dsnString": "",  "format": "namespace", "table": "xxx", "host": "10.0.0.1", "port": "3306", "user": "abc", "password": "pqr", "database": "test1" }}}}`, true}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 21 - Test Format for PostgreSQL
 | 
					
						
							| 
									
										
										
										
											2017-03-28 02:27:25 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "postgresql": { "1": { "enable": true, "connectionString": "", "format": "invalid", "table": "xxx", "host": "myhost", "port": "5432", "user": "abc", "password": "pqr", "database": "test1" }}}}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 22 - Test valid Format for PostgreSQL
 | 
					
						
							| 
									
										
										
										
											2017-03-28 02:27:25 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "postgresql": { "1": { "enable": true, "connectionString": "", "format": "namespace", "table": "xxx", "host": "myhost", "port": "5432", "user": "abc", "password": "pqr", "database": "test1" }}}}`, true}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 23 - Test Format for ElasticSearch
 | 
					
						
							| 
									
										
										
										
											2017-03-28 02:27:25 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "elasticsearch": { "1": { "enable": true, "format": "invalid", "url": "example.com", "index": "myindex" } }}}`, false}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 24 - Test valid Format for ElasticSearch
 | 
					
						
							| 
									
										
										
										
											2017-03-28 02:27:25 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "elasticsearch": { "1": { "enable": true, "format": "namespace", "url": "example.com", "index": "myindex" } }}}`, true}, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 25 - Test Format for Redis
 | 
					
						
							| 
									
										
										
										
											2017-03-31 19:47:40 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "redis": { "1": { "enable": true, "format": "invalid", "address": "example.com:80", "password": "xxx", "key": "key1" } }}}`, false}, | 
					
						
							| 
									
										
										
										
											2017-03-28 02:27:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 26 - Test valid Format for Redis
 | 
					
						
							| 
									
										
										
										
											2017-03-31 19:47:40 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "redis": { "1": { "enable": true, "format": "namespace", "address": "example.com:80", "password": "xxx", "key": "key1" } }}}`, true}, | 
					
						
							| 
									
										
										
										
											2017-06-15 08:27:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 		// Test 27 - Test MQTT
 | 
					
						
							| 
									
										
										
										
											2017-06-15 08:27:03 +08:00
										 |  |  | 		{`{"version": "` + v + `", "credential": { "accessKey": "minio", "secretKey": "minio123" }, "region": "us-east-1", "browser": "on", "notify": { "mqtt": { "1": { "enable": true, "broker": "",  "topic": "", "qos": 0, "clientId": "", "username": "", "password": ""}}}}`, false}, | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for i, testCase := range testCases { | 
					
						
							| 
									
										
										
										
											2017-03-17 02:06:17 +08:00
										 |  |  | 		if werr := ioutil.WriteFile(configPath, []byte(testCase.configData), 0700); werr != nil { | 
					
						
							|  |  |  | 			t.Fatal(werr) | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-03-31 13:26:24 +08:00
										 |  |  | 		_, verr := getValidConfig() | 
					
						
							| 
									
										
										
										
											2017-03-17 02:06:17 +08:00
										 |  |  | 		if testCase.shouldPass && verr != nil { | 
					
						
							|  |  |  | 			t.Errorf("Test %d, should pass but it failed with err = %v", i+1, verr) | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-03-17 02:06:17 +08:00
										 |  |  | 		if !testCase.shouldPass && verr == nil { | 
					
						
							| 
									
										
										
										
											2017-12-06 15:18:29 +08:00
										 |  |  | 			t.Errorf("Test %d, should fail but it succeeded.", i+1) | 
					
						
							| 
									
										
										
										
											2017-03-16 07:30:34 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |