| 
									
										
										
										
											2016-02-29 03:48:41 +01:00
										 |  |  | package dnsimple | 
					
						
							| 
									
										
										
										
											2016-01-26 12:14:10 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2016-01-26 12:42:44 +01:00
										 |  |  | 	"os" | 
					
						
							| 
									
										
										
										
											2016-01-26 12:14:10 +01:00
										 |  |  | 	"testing" | 
					
						
							| 
									
										
										
										
											2016-01-26 15:09:33 +01:00
										 |  |  | 	"time" | 
					
						
							| 
									
										
										
										
											2016-01-26 12:14:10 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/assert" | 
					
						
							| 
									
										
										
										
											2018-09-15 19:07:24 +02:00
										 |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							|  |  |  | 	"github.com/xenolf/lego/acme" | 
					
						
							| 
									
										
										
										
											2016-01-26 12:14:10 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-26 12:42:44 +01:00
										 |  |  | var ( | 
					
						
							| 
									
										
										
										
											2017-03-17 19:40:51 +01:00
										 |  |  | 	dnsimpleLiveTest   bool | 
					
						
							|  |  |  | 	dnsimpleOauthToken string | 
					
						
							|  |  |  | 	dnsimpleDomain     string | 
					
						
							| 
									
										
										
										
											2018-05-30 19:53:04 +02:00
										 |  |  | 	dnsimpleBaseURL    string | 
					
						
							| 
									
										
										
										
											2016-01-26 12:42:44 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func init() { | 
					
						
							| 
									
										
										
										
											2017-03-17 19:40:51 +01:00
										 |  |  | 	dnsimpleOauthToken = os.Getenv("DNSIMPLE_OAUTH_TOKEN") | 
					
						
							| 
									
										
										
										
											2016-01-26 15:09:33 +01:00
										 |  |  | 	dnsimpleDomain = os.Getenv("DNSIMPLE_DOMAIN") | 
					
						
							| 
									
										
										
										
											2018-05-30 19:53:04 +02:00
										 |  |  | 	dnsimpleBaseURL = "https://api.sandbox.dnsimple.com" | 
					
						
							| 
									
										
										
										
											2017-03-17 19:40:51 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if len(dnsimpleOauthToken) > 0 && len(dnsimpleDomain) > 0 { | 
					
						
							| 
									
										
										
										
											2018-05-30 19:53:04 +02:00
										 |  |  | 		baseURL := os.Getenv("DNSIMPLE_BASE_URL") | 
					
						
							| 
									
										
										
										
											2017-03-17 19:40:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-30 19:53:04 +02:00
										 |  |  | 		if baseURL != "" { | 
					
						
							|  |  |  | 			dnsimpleBaseURL = baseURL | 
					
						
							| 
									
										
										
										
											2017-03-17 19:40:51 +01:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-26 15:09:33 +01:00
										 |  |  | 		dnsimpleLiveTest = true | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-01-26 12:42:44 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-11 17:32:50 +02:00
										 |  |  | func restoreEnv() { | 
					
						
							| 
									
										
										
										
											2017-03-17 19:40:51 +01:00
										 |  |  | 	os.Setenv("DNSIMPLE_OAUTH_TOKEN", dnsimpleOauthToken) | 
					
						
							| 
									
										
										
										
											2018-05-30 19:53:04 +02:00
										 |  |  | 	os.Setenv("DNSIMPLE_BASE_URL", dnsimpleBaseURL) | 
					
						
							| 
									
										
										
										
											2016-01-26 12:42:44 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-09 18:51:49 +02:00
										 |  |  | func TestNewDNSProvider(t *testing.T) { | 
					
						
							|  |  |  | 	testCases := []struct { | 
					
						
							|  |  |  | 		desc      string | 
					
						
							|  |  |  | 		userAgent string | 
					
						
							|  |  |  | 		envVars   map[string]string | 
					
						
							|  |  |  | 		expected  string | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			desc:      "success", | 
					
						
							|  |  |  | 			userAgent: "lego", | 
					
						
							|  |  |  | 			envVars: map[string]string{ | 
					
						
							|  |  |  | 				"DNSIMPLE_OAUTH_TOKEN": "my_token", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			desc: "success: base url", | 
					
						
							|  |  |  | 			envVars: map[string]string{ | 
					
						
							|  |  |  | 				"DNSIMPLE_OAUTH_TOKEN": "my_token", | 
					
						
							|  |  |  | 				"DNSIMPLE_BASE_URL":    "https://api.dnsimple.test", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			desc: "missing oauth token", | 
					
						
							|  |  |  | 			envVars: map[string]string{ | 
					
						
							|  |  |  | 				"DNSIMPLE_OAUTH_TOKEN": "", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			expected: "dnsimple: OAuth token is missing", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-03-17 19:40:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-09 18:51:49 +02:00
										 |  |  | 	for _, test := range testCases { | 
					
						
							|  |  |  | 		t.Run(test.desc, func(t *testing.T) { | 
					
						
							|  |  |  | 			defer restoreEnv() | 
					
						
							|  |  |  | 			for key, value := range test.envVars { | 
					
						
							|  |  |  | 				if len(value) == 0 { | 
					
						
							|  |  |  | 					os.Unsetenv(key) | 
					
						
							|  |  |  | 				} else { | 
					
						
							|  |  |  | 					os.Setenv(key, value) | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if test.userAgent != "" { | 
					
						
							|  |  |  | 				acme.UserAgent = test.userAgent | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			p, err := NewDNSProvider() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if len(test.expected) == 0 { | 
					
						
							|  |  |  | 				require.NoError(t, err) | 
					
						
							|  |  |  | 				require.NotNil(t, p) | 
					
						
							|  |  |  | 				require.NotNil(t, p.config) | 
					
						
							|  |  |  | 				require.NotNil(t, p.client) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				baseURL := os.Getenv("DNSIMPLE_BASE_URL") | 
					
						
							|  |  |  | 				if baseURL != "" { | 
					
						
							|  |  |  | 					assert.Equal(t, baseURL, p.client.BaseURL) | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				if test.userAgent != "" { | 
					
						
							|  |  |  | 					assert.Equal(t, "lego", p.client.UserAgent) | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				require.EqualError(t, err, test.expected) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-01-26 12:25:51 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-01-26 15:09:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-09 18:51:49 +02:00
										 |  |  | func TestNewDNSProviderConfig(t *testing.T) { | 
					
						
							|  |  |  | 	testCases := []struct { | 
					
						
							|  |  |  | 		desc        string | 
					
						
							|  |  |  | 		accessToken string | 
					
						
							|  |  |  | 		baseURL     string | 
					
						
							|  |  |  | 		expected    string | 
					
						
							|  |  |  | 	}{ | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			desc:        "success", | 
					
						
							|  |  |  | 			accessToken: "my_token", | 
					
						
							|  |  |  | 			baseURL:     "", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			desc:        "success: base url", | 
					
						
							|  |  |  | 			accessToken: "my_token", | 
					
						
							|  |  |  | 			baseURL:     "https://api.dnsimple.test", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			desc:     "missing oauth token", | 
					
						
							|  |  |  | 			expected: "dnsimple: OAuth token is missing", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-03-17 19:40:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-09 18:51:49 +02:00
										 |  |  | 	for _, test := range testCases { | 
					
						
							|  |  |  | 		t.Run(test.desc, func(t *testing.T) { | 
					
						
							|  |  |  | 			defer restoreEnv() | 
					
						
							|  |  |  | 			os.Unsetenv("DNSIMPLE_OAUTH_TOKEN") | 
					
						
							|  |  |  | 			os.Unsetenv("DNSIMPLE_BASE_URL") | 
					
						
							| 
									
										
										
										
											2017-03-17 19:40:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-09 18:51:49 +02:00
										 |  |  | 			config := NewDefaultConfig() | 
					
						
							|  |  |  | 			config.AccessToken = test.accessToken | 
					
						
							|  |  |  | 			config.BaseURL = test.baseURL | 
					
						
							| 
									
										
										
										
											2017-03-17 19:40:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-09 18:51:49 +02:00
										 |  |  | 			p, err := NewDNSProviderConfig(config) | 
					
						
							| 
									
										
										
										
											2017-03-17 19:40:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-09 18:51:49 +02:00
										 |  |  | 			if len(test.expected) == 0 { | 
					
						
							|  |  |  | 				require.NoError(t, err) | 
					
						
							|  |  |  | 				require.NotNil(t, p) | 
					
						
							|  |  |  | 				require.NotNil(t, p.config) | 
					
						
							|  |  |  | 				require.NotNil(t, p.client) | 
					
						
							| 
									
										
										
										
											2018-09-15 19:07:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-09 18:51:49 +02:00
										 |  |  | 				if test.baseURL != "" { | 
					
						
							|  |  |  | 					assert.Equal(t, test.baseURL, p.client.BaseURL) | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2017-03-17 19:40:51 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-09 18:51:49 +02:00
										 |  |  | 			} else { | 
					
						
							|  |  |  | 				require.EqualError(t, err, test.expected) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-03-17 19:40:51 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // Present | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-26 15:09:33 +01:00
										 |  |  | func TestLiveDNSimplePresent(t *testing.T) { | 
					
						
							|  |  |  | 	if !dnsimpleLiveTest { | 
					
						
							|  |  |  | 		t.Skip("skipping live test") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-15 19:07:24 +02:00
										 |  |  | 	config := NewDefaultConfig() | 
					
						
							|  |  |  | 	config.AccessToken = dnsimpleOauthToken | 
					
						
							|  |  |  | 	config.BaseURL = dnsimpleBaseURL | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	provider, err := NewDNSProviderConfig(config) | 
					
						
							| 
									
										
										
										
											2016-01-26 15:09:33 +01:00
										 |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	err = provider.Present(dnsimpleDomain, "", "123d==") | 
					
						
							|  |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-17 19:40:51 +01:00
										 |  |  | // | 
					
						
							|  |  |  | // Cleanup | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-26 15:09:33 +01:00
										 |  |  | func TestLiveDNSimpleCleanUp(t *testing.T) { | 
					
						
							|  |  |  | 	if !dnsimpleLiveTest { | 
					
						
							|  |  |  | 		t.Skip("skipping live test") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	time.Sleep(time.Second * 1) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-15 19:07:24 +02:00
										 |  |  | 	config := NewDefaultConfig() | 
					
						
							|  |  |  | 	config.AccessToken = dnsimpleOauthToken | 
					
						
							|  |  |  | 	config.BaseURL = dnsimpleBaseURL | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	provider, err := NewDNSProviderConfig(config) | 
					
						
							| 
									
										
										
										
											2016-01-26 15:09:33 +01:00
										 |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	err = provider.CleanUp(dnsimpleDomain, "", "123d==") | 
					
						
							|  |  |  | 	assert.NoError(t, err) | 
					
						
							|  |  |  | } |