2017-02-15 16:31:00 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/ *  
						 
					
						
							
								
									
										
										
										
											2019-04-10 02:39:42 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								 *  MinIO  Cloud  Storage ,  ( C )  2017  MinIO ,  Inc . 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 16:31:00 +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  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"fmt" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"io/ioutil" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"net/http" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"net/http/httptest" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"os" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"runtime" 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-06 09:28:14 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									"strings" 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 16:31:00 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									"testing" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									"time" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								)  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-10 07:12:13 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								func  TestMinioVersionToReleaseTime ( t  * testing . T )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									testCases  :=  [ ] struct  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										version     string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										isOfficial  bool 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ "2017-09-29T19:16:56Z" ,  true } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ "RELEASE.2017-09-29T19-16-56Z" ,  false } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ "DEVELOPMENT.GOGET" ,  false } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  i ,  testCase  :=  range  testCases  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										_ ,  err  :=  minioVersionToReleaseTime ( testCase . version ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  ( err  ==  nil )  !=  testCase . isOfficial  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											t . Errorf ( "Test %d: Expected %v but got %v" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												i + 1 ,  testCase . isOfficial ,  err  ==  nil ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  TestReleaseTagToNFromTimeConversion ( t  * testing . T )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									utcLoc ,  _  :=  time . LoadLocation ( "" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									testCases  :=  [ ] struct  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										t       time . Time 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										tag     string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										errStr  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ time . Date ( 2017 ,  time . September ,  29 ,  19 ,  16 ,  56 ,  0 ,  utcLoc ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											"RELEASE.2017-09-29T19-16-56Z" ,  "" } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ time . Date ( 2017 ,  time . August ,  5 ,  0 ,  0 ,  53 ,  0 ,  utcLoc ) , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											"RELEASE.2017-08-05T00-00-53Z" ,  "" } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ time . Now ( ) . UTC ( ) ,  "2017-09-29T19:16:56Z" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											"2017-09-29T19:16:56Z is not a valid release tag" } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ time . Now ( ) . UTC ( ) ,  "DEVELOPMENT.GOGET" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											"DEVELOPMENT.GOGET is not a valid release tag" } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  i ,  testCase  :=  range  testCases  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  testCase . errStr  !=  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											got  :=  releaseTimeToReleaseTag ( testCase . t ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  got  !=  testCase . tag  &&  testCase . errStr  ==  ""  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												t . Errorf ( "Test %d: Expected %v but got %v" ,  i + 1 ,  testCase . tag ,  got ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										tagTime ,  err  :=  releaseTagToReleaseTime ( testCase . tag ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  err  !=  nil  &&  err . Error ( )  !=  testCase . errStr  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											t . Errorf ( "Test %d: Expected %v but got %v" ,  i + 1 ,  testCase . errStr ,  err . Error ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  err  ==  nil  &&  tagTime  !=  testCase . t  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											t . Errorf ( "Test %d: Expected %v but got %v" ,  i + 1 ,  testCase . t ,  tagTime ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-09 17:42:12 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								func  TestDownloadURL ( t  * testing . T )  {  
						 
					
						
							
								
									
										
										
										
											2020-05-22 23:40:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									sci  :=  os . Getenv ( "MINIO_CI_CD" ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-18 09:34:17 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-05-22 23:40:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									os . Setenv ( "MINIO_CI_CD" ,  "" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									defer  os . Setenv ( "MINIO_CI_CD" ,  sci ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-18 09:34:17 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-10 07:12:13 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									minioVersion1  :=  releaseTimeToReleaseTag ( UTCNow ( ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-09 17:42:12 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									durl  :=  getDownloadURL ( minioVersion1 ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-06 09:28:14 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									if  IsDocker ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  durl  !=  "docker pull minio/minio:" + minioVersion1  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											t . Errorf ( "Expected %s, got %s" ,  "docker pull minio/minio:" + minioVersion1 ,  durl ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-09 17:42:12 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									}  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-06 09:28:14 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										if  runtime . GOOS  ==  "windows"  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  durl  !=  minioReleaseURL + "minio.exe"  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												t . Errorf ( "Expected %s, got %s" ,  minioReleaseURL + "minio.exe" ,  durl ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  durl  !=  minioReleaseURL + "minio"  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												t . Errorf ( "Expected %s, got %s" ,  minioReleaseURL + "minio" ,  durl ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-09 17:42:12 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									os . Setenv ( "KUBERNETES_SERVICE_HOST" ,  "10.11.148.5" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									durl  =  getDownloadURL ( minioVersion1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  durl  !=  kubernetesDeploymentDoc  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										t . Errorf ( "Expected %s, got %s" ,  kubernetesDeploymentDoc ,  durl ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 08:33:21 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									os . Unsetenv ( "KUBERNETES_SERVICE_HOST" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									os . Setenv ( "MESOS_CONTAINER_NAME" ,  "mesos-1111" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									durl  =  getDownloadURL ( minioVersion1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  durl  !=  mesosDeploymentDoc  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										t . Errorf ( "Expected %s, got %s" ,  mesosDeploymentDoc ,  durl ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									os . Unsetenv ( "MESOS_CONTAINER_NAME" ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-09 17:42:12 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 08:33:21 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								// Tests user agent string.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  TestUserAgent ( t  * testing . T )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									testCases  :=  [ ] struct  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										envName      string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										envValue     string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										mode         string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										expectedStr  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											envName :      "" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											envValue :     "" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											mode :         globalMinioModeFS , 
							 
						 
					
						
							
								
									
										
										
										
											2019-04-10 02:39:42 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											expectedStr :  fmt . Sprintf ( "MinIO (%s; %s; %s; source) MinIO/DEVELOPMENT.GOGET MinIO/DEVELOPMENT.GOGET MinIO/DEVELOPMENT.GOGET" ,  runtime . GOOS ,  runtime . GOARCH ,  globalMinioModeFS ) , 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 08:33:21 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											envName :      "MESOS_CONTAINER_NAME" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											envValue :     "mesos-11111" , 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-13 11:04:01 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											mode :         globalMinioModeErasure , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											expectedStr :  fmt . Sprintf ( "MinIO (%s; %s; %s; %s; source) MinIO/DEVELOPMENT.GOGET MinIO/DEVELOPMENT.GOGET MinIO/DEVELOPMENT.GOGET MinIO/universe-%s" ,  runtime . GOOS ,  runtime . GOARCH ,  globalMinioModeErasure ,  "dcos" ,  "mesos-1111" ) , 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 08:33:21 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											envName :      "KUBERNETES_SERVICE_HOST" , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											envValue :     "10.11.148.5" , 
							 
						 
					
						
							
								
									
										
										
										
											2020-06-13 11:04:01 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
											mode :         globalMinioModeErasure , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											expectedStr :  fmt . Sprintf ( "MinIO (%s; %s; %s; %s; source) MinIO/DEVELOPMENT.GOGET MinIO/DEVELOPMENT.GOGET MinIO/DEVELOPMENT.GOGET" ,  runtime . GOOS ,  runtime . GOARCH ,  globalMinioModeErasure ,  "kubernetes" ) , 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 08:33:21 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  i ,  testCase  :=  range  testCases  { 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-22 23:40:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										sci  :=  os . Getenv ( "MINIO_CI_CD" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										os . Setenv ( "MINIO_CI_CD" ,  "" ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-18 09:34:17 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 08:33:21 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										os . Setenv ( testCase . envName ,  testCase . envValue ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  testCase . envName  ==  "MESOS_CONTAINER_NAME"  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											os . Setenv ( "MARATHON_APP_LABEL_DCOS_PACKAGE_VERSION" ,  "mesos-1111" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										str  :=  getUserAgent ( testCase . mode ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-06 09:28:14 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										expectedStr  :=  testCase . expectedStr 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  IsDocker ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											expectedStr  =  strings . Replace ( expectedStr ,  "; source" ,  "; docker; source" ,  - 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  str  !=  expectedStr  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											t . Errorf ( "Test %d: expected: %s, got: %s" ,  i + 1 ,  expectedStr ,  str ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 08:33:21 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2020-05-22 23:40:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
										os . Setenv ( "MINIO_CI_CD" ,  sci ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 08:33:21 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										os . Unsetenv ( "MARATHON_APP_LABEL_DCOS_PACKAGE_VERSION" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										os . Unsetenv ( testCase . envName ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Tests if the environment we are running is in DCOS.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  TestIsDCOS ( t  * testing . T )  {  
						 
					
						
							
								
									
										
										
										
											2020-05-22 23:40:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									sci  :=  os . Getenv ( "MINIO_CI_CD" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									os . Setenv ( "MINIO_CI_CD" ,  "" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									defer  os . Setenv ( "MINIO_CI_CD" ,  sci ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-18 09:34:17 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-13 08:33:21 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									os . Setenv ( "MESOS_CONTAINER_NAME" ,  "mesos-1111" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									dcos  :=  IsDCOS ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ! dcos  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										t . Fatalf ( "Expected %t, got %t" ,  true ,  dcos ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									os . Unsetenv ( "MESOS_CONTAINER_NAME" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									dcos  =  IsDCOS ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  dcos  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										t . Fatalf ( "Expected %t, got %t" ,  false ,  dcos ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-09 17:42:12 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								// Tests if the environment we are running is in kubernetes.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  TestIsKubernetes ( t  * testing . T )  {  
						 
					
						
							
								
									
										
										
										
											2020-05-22 23:40:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
									sci  :=  os . Getenv ( "MINIO_CI_CD" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									os . Setenv ( "MINIO_CI_CD" ,  "" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									defer  os . Setenv ( "MINIO_CI_CD" ,  sci ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-12-18 09:34:17 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-09 17:42:12 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									os . Setenv ( "KUBERNETES_SERVICE_HOST" ,  "10.11.148.5" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									kubernetes  :=  IsKubernetes ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  ! kubernetes  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										t . Fatalf ( "Expected %t, got %t" ,  true ,  kubernetes ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									os . Unsetenv ( "KUBERNETES_SERVICE_HOST" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									kubernetes  =  IsKubernetes ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									if  kubernetes  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										t . Fatalf ( "Expected %t, got %t" ,  false ,  kubernetes ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-25 04:17:28 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								// Tests if the environment we are running is Helm chart.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  TestGetHelmVersion ( t  * testing . T )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									createTempFile  :=  func ( content  string )  string  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										tmpfile ,  err  :=  ioutil . TempFile ( "" ,  "helm-testfile-" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											t . Fatalf ( "Unable to create temporary file. %s" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  _ ,  err  =  tmpfile . Write ( [ ] byte ( content ) ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											t . Fatalf ( "Unable to create temporary file. %s" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  err  =  tmpfile . Close ( ) ;  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											t . Fatalf ( "Unable to create temporary file. %s" ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										return  tmpfile . Name ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									filename  :=  createTempFile ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										` app = "virtuous-rat-minio" 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								chart = "minio-0.1.3"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								heritage = "Tiller"  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								pod - template - hash = "818089471" ` )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									defer  os . Remove ( filename ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									testCases  :=  [ ] struct  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										filename        string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										expectedResult  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ "" ,  "" } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ "/tmp/non-existing-file" ,  "" } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ filename ,  "minio-0.1.3" } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  _ ,  testCase  :=  range  testCases  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										result  :=  getHelmVersion ( testCase . filename ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  testCase . expectedResult  !=  result  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											t . Fatalf ( "result: expected: %v, got: %v" ,  testCase . expectedResult ,  result ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 16:31:00 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								func  TestDownloadReleaseData ( t  * testing . T )  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									httpServer1  :=  httptest . NewServer ( http . HandlerFunc ( func ( w  http . ResponseWriter ,  r  * http . Request )  { } ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									defer  httpServer1 . Close ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									httpServer2  :=  httptest . NewServer ( http . HandlerFunc ( func ( w  http . ResponseWriter ,  r  * http . Request )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										fmt . Fprintln ( w ,  "fbe246edbd382902db9a4035df7dce8cb441357d minio.RELEASE.2016-10-07T01-16-39Z" ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									defer  httpServer2 . Close ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									httpServer3  :=  httptest . NewServer ( http . HandlerFunc ( func ( w  http . ResponseWriter ,  r  * http . Request )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										http . Error ( w ,  "" ,  http . StatusNotFound ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									defer  httpServer3 . Close ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									testCases  :=  [ ] struct  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										releaseChecksumURL  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										expectedResult      string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										expectedErr         error 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ httpServer1 . URL ,  "" ,  nil } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ httpServer2 . URL ,  "fbe246edbd382902db9a4035df7dce8cb441357d minio.RELEASE.2016-10-07T01-16-39Z\n" ,  nil } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ httpServer3 . URL ,  "" ,  fmt . Errorf ( "Error downloading URL "  +  httpServer3 . URL  +  ". Response: 404 Not Found" ) } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									for  _ ,  testCase  :=  range  testCases  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-10 07:12:13 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										result ,  err  :=  downloadReleaseURL ( testCase . releaseChecksumURL ,  1 * time . Second ,  "" ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 16:31:00 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										if  testCase . expectedErr  ==  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  err  !=  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												t . Fatalf ( "error: expected: %v, got: %v" ,  testCase . expectedErr ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  if  err  ==  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											t . Fatalf ( "error: expected: %v, got: %v" ,  testCase . expectedErr ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  if  testCase . expectedErr . Error ( )  !=  err . Error ( )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											t . Fatalf ( "error: expected: %v, got: %v" ,  testCase . expectedErr ,  err ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										if  testCase . expectedResult  !=  result  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											t . Fatalf ( "result: expected: %v, got: %v" ,  testCase . expectedResult ,  result ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								func  TestParseReleaseData ( t  * testing . T )  {  
						 
					
						
							
								
									
										
										
										
											2017-10-10 07:12:13 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									releaseTime ,  _  :=  releaseTagToReleaseTime ( "RELEASE.2016-10-07T01-16-39Z" ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 16:31:00 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									testCases  :=  [ ] struct  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-16 04:33:42 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										data               string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										expectedResult     time . Time 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										expectedSha256hex  string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										expectedErr        error 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 16:31:00 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} { 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-16 04:33:42 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										{ "more than two fields" ,  time . Time { } ,  "" ,  fmt . Errorf ( "Unknown release data `more than two fields`" ) } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ "more than" ,  time . Time { } ,  "" ,  fmt . Errorf ( "Unknown release information `than`" ) } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ "more than.two.fields" ,  time . Time { } ,  "" ,  fmt . Errorf ( "Unknown release `than.two.fields`" ) } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ "more minio.RELEASE.fields" ,  time . Time { } ,  "" ,  fmt . Errorf ( ` Unknown release tag format. parsing time "fields" as "2006-01-02T15-04-05Z": cannot parse "fields" as "2006" ` ) } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ "more minio.RELEASE.2016-10-07T01-16-39Z" ,  releaseTime ,  "more" ,  nil } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										{ "fbe246edbd382902db9a4035df7dce8cb441357d minio.RELEASE.2016-10-07T01-16-39Z\n" ,  releaseTime ,  "fbe246edbd382902db9a4035df7dce8cb441357d" ,  nil } , 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-29 06:04:43 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										{ "fbe246edbd382902db9a4035df7dce8cb441357d minio.RELEASE.2016-10-07T01-16-39Z.customer-hotfix\n" ,  releaseTime ,  "fbe246edbd382902db9a4035df7dce8cb441357d" ,  nil } , 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 16:31:00 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-10 07:12:13 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
									for  i ,  testCase  :=  range  testCases  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-16 04:33:42 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										sha256Hex ,  result ,  err  :=  parseReleaseData ( testCase . data ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 16:31:00 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										if  testCase . expectedErr  ==  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  err  !=  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-10 07:12:13 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
												t . Errorf ( "error case %d: expected: %v, got: %v" ,  i + 1 ,  testCase . expectedErr ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 16:31:00 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
										}  else  if  err  ==  nil  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-10 07:12:13 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											t . Errorf ( "error case %d: expected: %v, got: %v" ,  i + 1 ,  testCase . expectedErr ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 16:31:00 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										}  else  if  testCase . expectedErr . Error ( )  !=  err . Error ( )  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-10 07:12:13 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
											t . Errorf ( "error case %d: expected: %v, got: %v" ,  i + 1 ,  testCase . expectedErr ,  err ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 16:31:00 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-16 04:33:42 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										if  err  ==  nil  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  sha256Hex  !=  testCase . expectedSha256hex  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												t . Errorf ( "case %d: result: expected: %v, got: %v" ,  i + 1 ,  testCase . expectedSha256hex ,  sha256Hex ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											if  ! testCase . expectedResult . Equal ( result )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
												t . Errorf ( "case %d: result: expected: %v, got: %v" ,  i + 1 ,  testCase . expectedResult ,  result ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
											} 
							 
						 
					
						
							
								
									
										
										
										
											2017-02-15 16:31:00 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
										} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
									} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}