| 
									
										
										
										
											2016-10-06 03:48:07 +08:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2017-01-19 04:24:34 +08:00
										 |  |  |  * Minio Cloud Storage, (C) 2016, 2017 Minio, Inc. | 
					
						
							| 
									
										
										
										
											2016-10-06 03:48:07 +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. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package cmd | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 11:22:15 +08:00
										 |  |  | import ( | 
					
						
							| 
									
										
										
										
											2016-10-14 19:48:08 +08:00
										 |  |  | 	"crypto/x509" | 
					
						
							|  |  |  | 	"crypto/x509/pkix" | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							| 
									
										
										
										
											2017-08-13 10:25:43 +08:00
										 |  |  | 	"os" | 
					
						
							| 
									
										
										
										
											2017-06-01 00:21:28 +08:00
										 |  |  | 	"reflect" | 
					
						
							| 
									
										
										
										
											2016-10-13 11:22:15 +08:00
										 |  |  | 	"strings" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							| 
									
										
										
										
											2016-10-14 19:48:08 +08:00
										 |  |  | 	"time" | 
					
						
							| 
									
										
										
										
											2016-10-13 11:22:15 +08:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2016-10-06 03:48:07 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Tests if we generate storage info.
 | 
					
						
							|  |  |  | func TestStorageInfoMsg(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2018-02-16 09:45:57 +08:00
										 |  |  | 	infoStorage := StorageInfo{} | 
					
						
							|  |  |  | 	infoStorage.Backend.Type = Erasure | 
					
						
							|  |  |  | 	infoStorage.Backend.OnlineDisks = 7 | 
					
						
							|  |  |  | 	infoStorage.Backend.OfflineDisks = 1 | 
					
						
							| 
									
										
										
										
											2016-10-06 03:48:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-24 08:30:25 +08:00
										 |  |  | 	if msg := getStorageInfoMsg(infoStorage); !strings.Contains(msg, "7 Online, 1 Offline") { | 
					
						
							| 
									
										
										
										
											2016-10-17 05:24:15 +08:00
										 |  |  | 		t.Fatal("Unexpected storage info message, found:", msg) | 
					
						
							| 
									
										
										
										
											2016-10-06 03:48:07 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-10-14 19:48:08 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Tests if certificate expiry warning will be printed
 | 
					
						
							|  |  |  | func TestCertificateExpiryInfo(t *testing.T) { | 
					
						
							|  |  |  | 	// given
 | 
					
						
							| 
									
										
										
										
											2016-10-15 02:15:59 +08:00
										 |  |  | 	var expiredDate = time.Now().Add(time.Hour * 24 * (30 - 1)) // 29 days.
 | 
					
						
							| 
									
										
										
										
											2016-10-14 19:48:08 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	var fakeCerts = []*x509.Certificate{ | 
					
						
							| 
									
										
										
										
											2016-10-15 02:15:59 +08:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-10-14 19:48:08 +08:00
										 |  |  | 			NotAfter: expiredDate, | 
					
						
							|  |  |  | 			Subject: pkix.Name{ | 
					
						
							|  |  |  | 				CommonName: "Test cert", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	expectedMsg := colorBlue("\nCertificate expiry info:\n") + | 
					
						
							|  |  |  | 		colorBold(fmt.Sprintf("#1 Test cert will expire on %s\n", expiredDate)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-15 02:15:59 +08:00
										 |  |  | 	// When
 | 
					
						
							| 
									
										
										
										
											2016-10-14 19:48:08 +08:00
										 |  |  | 	msg := getCertificateChainMsg(fakeCerts) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-15 02:15:59 +08:00
										 |  |  | 	// Then
 | 
					
						
							| 
									
										
										
										
											2016-10-14 19:48:08 +08:00
										 |  |  | 	if msg != expectedMsg { | 
					
						
							|  |  |  | 		t.Fatalf("Expected message was: %s, got: %s", expectedMsg, msg) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Tests if certificate expiry warning will not be printed if certificate not expired
 | 
					
						
							|  |  |  | func TestCertificateNotExpired(t *testing.T) { | 
					
						
							|  |  |  | 	// given
 | 
					
						
							| 
									
										
										
										
											2016-10-15 02:15:59 +08:00
										 |  |  | 	var expiredDate = time.Now().Add(time.Hour * 24 * (30 + 1)) // 31 days.
 | 
					
						
							| 
									
										
										
										
											2016-10-14 19:48:08 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	var fakeCerts = []*x509.Certificate{ | 
					
						
							| 
									
										
										
										
											2016-10-15 02:15:59 +08:00
										 |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2016-10-14 19:48:08 +08:00
										 |  |  | 			NotAfter: expiredDate, | 
					
						
							|  |  |  | 			Subject: pkix.Name{ | 
					
						
							|  |  |  | 				CommonName: "Test cert", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// when
 | 
					
						
							|  |  |  | 	msg := getCertificateChainMsg(fakeCerts) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// then
 | 
					
						
							|  |  |  | 	if msg != "" { | 
					
						
							|  |  |  | 		t.Fatalf("Expected empty message was: %s", msg) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2017-01-11 08:43:48 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-01 00:21:28 +08:00
										 |  |  | // Tests stripping standard ports from apiEndpoints.
 | 
					
						
							|  |  |  | func TestStripStandardPorts(t *testing.T) { | 
					
						
							|  |  |  | 	apiEndpoints := []string{"http://127.0.0.1:9000", "http://127.0.0.2:80", "https://127.0.0.3:443"} | 
					
						
							|  |  |  | 	expectedAPIEndpoints := []string{"http://127.0.0.1:9000", "http://127.0.0.2", "https://127.0.0.3"} | 
					
						
							|  |  |  | 	newAPIEndpoints := stripStandardPorts(apiEndpoints) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if !reflect.DeepEqual(expectedAPIEndpoints, newAPIEndpoints) { | 
					
						
							|  |  |  | 		t.Fatalf("Expected %#v, got %#v", expectedAPIEndpoints, newAPIEndpoints) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	apiEndpoints = []string{"http://%%%%%:9000"} | 
					
						
							|  |  |  | 	newAPIEndpoints = stripStandardPorts(apiEndpoints) | 
					
						
							|  |  |  | 	if !reflect.DeepEqual(apiEndpoints, newAPIEndpoints) { | 
					
						
							|  |  |  | 		t.Fatalf("Expected %#v, got %#v", apiEndpoints, newAPIEndpoints) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	apiEndpoints = []string{"http://127.0.0.1:443", "https://127.0.0.1:80"} | 
					
						
							|  |  |  | 	newAPIEndpoints = stripStandardPorts(apiEndpoints) | 
					
						
							|  |  |  | 	if !reflect.DeepEqual(apiEndpoints, newAPIEndpoints) { | 
					
						
							|  |  |  | 		t.Fatalf("Expected %#v, got %#v", apiEndpoints, newAPIEndpoints) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-11 08:43:48 +08:00
										 |  |  | // Test printing server common message.
 | 
					
						
							|  |  |  | func TestPrintServerCommonMessage(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2017-01-19 04:24:34 +08:00
										 |  |  | 	root, err := newTestConfig(globalMinioDefaultRegion) | 
					
						
							| 
									
										
										
										
											2017-01-11 08:43:48 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-08-13 10:25:43 +08:00
										 |  |  | 	defer os.RemoveAll(root) | 
					
						
							| 
									
										
										
										
											2017-01-11 08:43:48 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-01 00:21:28 +08:00
										 |  |  | 	apiEndpoints := []string{"http://127.0.0.1:9000"} | 
					
						
							| 
									
										
										
										
											2017-01-11 08:43:48 +08:00
										 |  |  | 	printServerCommonMsg(apiEndpoints) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Tests print cli access message.
 | 
					
						
							|  |  |  | func TestPrintCLIAccessMsg(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2017-01-19 04:24:34 +08:00
										 |  |  | 	root, err := newTestConfig(globalMinioDefaultRegion) | 
					
						
							| 
									
										
										
										
											2017-01-11 08:43:48 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-08-13 10:25:43 +08:00
										 |  |  | 	defer os.RemoveAll(root) | 
					
						
							| 
									
										
										
										
											2017-01-11 08:43:48 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-01 00:21:28 +08:00
										 |  |  | 	apiEndpoints := []string{"http://127.0.0.1:9000"} | 
					
						
							| 
									
										
										
										
											2017-06-10 10:50:51 +08:00
										 |  |  | 	printCLIAccessMsg(apiEndpoints[0], "myminio") | 
					
						
							| 
									
										
										
										
											2017-01-11 08:43:48 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Test print startup message.
 | 
					
						
							|  |  |  | func TestPrintStartupMessage(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2017-01-19 04:24:34 +08:00
										 |  |  | 	root, err := newTestConfig(globalMinioDefaultRegion) | 
					
						
							| 
									
										
										
										
											2017-01-11 08:43:48 +08:00
										 |  |  | 	if err != nil { | 
					
						
							|  |  |  | 		t.Fatal(err) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-08-13 10:25:43 +08:00
										 |  |  | 	defer os.RemoveAll(root) | 
					
						
							| 
									
										
										
										
											2017-01-11 08:43:48 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-01 00:21:28 +08:00
										 |  |  | 	apiEndpoints := []string{"http://127.0.0.1:9000"} | 
					
						
							| 
									
										
										
										
											2017-01-11 08:43:48 +08:00
										 |  |  | 	printStartupMessage(apiEndpoints) | 
					
						
							|  |  |  | } |