mirror of https://github.com/knative/func.git
				
				
				
			separate deploy from create for the --local flag
This commit is contained in:
		
							parent
							
								
									86cdedec91
								
							
						
					
					
						commit
						c78be32b72
					
				| 
						 | 
					@ -149,19 +149,6 @@ func (c *Client) Create(language string) (err error) {
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Deploy the initialized service function, returning its publicly
 | 
					 | 
				
			||||||
	// addressible name for possible registration.
 | 
					 | 
				
			||||||
	address, err := c.deployer.Deploy(c.name, c.root)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// TODO
 | 
					 | 
				
			||||||
	// Dervive the cluster address of the service.
 | 
					 | 
				
			||||||
	// Derive the public domain of the service from the directory path.
 | 
					 | 
				
			||||||
	c.dnsProvider.Provide(c.name, address)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Associate the public domain to the cluster-defined address.
 | 
					 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -245,8 +232,22 @@ func pathToDomain(path string, maxLevels int) string {
 | 
				
			||||||
	return domain
 | 
						return domain
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *Client) Deploy() error {
 | 
					// Deploy the code at root, using the derived name, using the configured deployer.
 | 
				
			||||||
	return errors.New("Not Implemented")
 | 
					func (c *Client) Deploy() (err error) {
 | 
				
			||||||
 | 
						// Deploy the initialized service function, returning its publicly
 | 
				
			||||||
 | 
						// addressible name for possible registration.
 | 
				
			||||||
 | 
						address, err := c.deployer.Deploy(c.name, c.root)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// TODO
 | 
				
			||||||
 | 
						// Dervive the cluster address of the service.
 | 
				
			||||||
 | 
						// Derive the public domain of the service from the directory path.
 | 
				
			||||||
 | 
						c.dnsProvider.Provide(c.name, address)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Associate the public domain to the cluster-defined address.
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Manual implementations (noops) of required interfaces.
 | 
					// Manual implementations (noops) of required interfaces.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,20 @@ import (
 | 
				
			||||||
	"github.com/lkingland/faas/client/mock"
 | 
						"github.com/lkingland/faas/client/mock"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TestInvalidDomain ensures that creating from a directory strucutre
 | 
				
			||||||
 | 
					// where the domain can not be derived while simultaneously failing to provide
 | 
				
			||||||
 | 
					// an explicit name fails.
 | 
				
			||||||
 | 
					func TestInvalidDomain(t *testing.T) {
 | 
				
			||||||
 | 
						_, err := client.New(
 | 
				
			||||||
 | 
							// Ensure no domain is found even if we are actually running within a path
 | 
				
			||||||
 | 
							// from which a domain could be derived.
 | 
				
			||||||
 | 
							client.WithDomainSearchLimit(0),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err == nil {
 | 
				
			||||||
 | 
							t.Fatal("no error generated for unspecified and underivable name")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TestCreate ensures that instantiation completes without error when provided with a
 | 
					// TestCreate ensures that instantiation completes without error when provided with a
 | 
				
			||||||
// language.  A single client instance services a single Service Function instance
 | 
					// language.  A single client instance services a single Service Function instance
 | 
				
			||||||
// and as such requires the desired effective DNS for the function.  This is an optional
 | 
					// and as such requires the desired effective DNS for the function.  This is an optional
 | 
				
			||||||
| 
						 | 
					@ -28,72 +42,6 @@ func TestCreate(t *testing.T) {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TestCreateInvalidName ensures that creating from a directory strucutre
 | 
					 | 
				
			||||||
// where the domain can not be derived while simultaneously failing to provide
 | 
					 | 
				
			||||||
// an explicit name fails.
 | 
					 | 
				
			||||||
func TestCreateDomainInvalid(t *testing.T) {
 | 
					 | 
				
			||||||
	_, err := client.New(
 | 
					 | 
				
			||||||
		// Ensure no domain is found even if we are actually running within a path
 | 
					 | 
				
			||||||
		// from which a domain could be derived.
 | 
					 | 
				
			||||||
		client.WithDomainSearchLimit(0),
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	if err == nil {
 | 
					 | 
				
			||||||
		t.Fatal("no error generated for unspecified and underivable name")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// TestCreateDomain ensures that the effective domain is dervied from
 | 
					 | 
				
			||||||
// directory structure.  See the unit tests for pathToDomain for details.
 | 
					 | 
				
			||||||
func TestCreateDomain(t *testing.T) {
 | 
					 | 
				
			||||||
	// the mock dns provider does nothing but receive the caluclated
 | 
					 | 
				
			||||||
	// domain name via it's Provide(domain) method, which is the value
 | 
					 | 
				
			||||||
	// being tested here.
 | 
					 | 
				
			||||||
	dnsProvider := mock.NewDNSProvider()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	client, err := client.New(
 | 
					 | 
				
			||||||
		client.WithRoot("./testdata/example.com"), // set function root
 | 
					 | 
				
			||||||
		client.WithDomainSearchLimit(1),           // Limit recursion to one level
 | 
					 | 
				
			||||||
		client.WithDNSProvider(dnsProvider),       // will receive the final value
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		t.Fatal(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err := client.Create("go"); err != nil {
 | 
					 | 
				
			||||||
		t.Fatal(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if !dnsProvider.ProvideInvoked {
 | 
					 | 
				
			||||||
		t.Fatal("dns provider was not invoked")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if dnsProvider.NameRequested != "example.com" {
 | 
					 | 
				
			||||||
		t.Fatalf("expected 'example.com', got '%v'", dnsProvider.NameRequested)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// TestCreateSubdomain ensures that a subdirectory is interpreted as a subdomain
 | 
					 | 
				
			||||||
// when calculating final domain.  See the unit tests for pathToDomain for the
 | 
					 | 
				
			||||||
// details and edge cases of this caluclation.
 | 
					 | 
				
			||||||
func TestCreateSubdomain(t *testing.T) {
 | 
					 | 
				
			||||||
	dnsProvider := mock.NewDNSProvider()
 | 
					 | 
				
			||||||
	client, err := client.New(
 | 
					 | 
				
			||||||
		client.WithRoot("./testdata/example.com/admin"),
 | 
					 | 
				
			||||||
		client.WithDomainSearchLimit(2),
 | 
					 | 
				
			||||||
		client.WithDNSProvider(dnsProvider),
 | 
					 | 
				
			||||||
	)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		t.Fatal(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if err := client.Create("go"); err != nil {
 | 
					 | 
				
			||||||
		t.Fatal(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if !dnsProvider.ProvideInvoked {
 | 
					 | 
				
			||||||
		t.Fatal("dns provider was not invoked")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if dnsProvider.NameRequested != "admin.example.com" {
 | 
					 | 
				
			||||||
		t.Fatalf("expected 'admin.example.com', got '%v'", dnsProvider.NameRequested)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// TestCreateInitializes ensures that a call to Create invokes the Service
 | 
					// TestCreateInitializes ensures that a call to Create invokes the Service
 | 
				
			||||||
// Function Initializer with correct parameters.
 | 
					// Function Initializer with correct parameters.
 | 
				
			||||||
func TestCreateInitializes(t *testing.T) {
 | 
					func TestCreateInitializes(t *testing.T) {
 | 
				
			||||||
| 
						 | 
					@ -129,9 +77,9 @@ func TestCreateInitializes(t *testing.T) {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TestCreateDeploys ensures that a call to Create invokes the Sevice Function
 | 
					// TestDeploy ensures that a call to Deploy invokes the Sevice Function
 | 
				
			||||||
// Deployer with the correct parameters.
 | 
					// Deployer with the correct parameters.
 | 
				
			||||||
func TestCreateDeploys(t *testing.T) {
 | 
					func TestDeploy(t *testing.T) {
 | 
				
			||||||
	deployer := mock.NewDeployer()
 | 
						deployer := mock.NewDeployer()
 | 
				
			||||||
	client, err := client.New(
 | 
						client, err := client.New(
 | 
				
			||||||
		client.WithRoot("./testdata/example.com/admin"), // set function root
 | 
							client.WithRoot("./testdata/example.com/admin"), // set function root
 | 
				
			||||||
| 
						 | 
					@ -153,10 +101,62 @@ func TestCreateDeploys(t *testing.T) {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err := client.Create("go"); err != nil {
 | 
						if err := client.Deploy(); err != nil {
 | 
				
			||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !deployer.DeployInvoked {
 | 
						if !deployer.DeployInvoked {
 | 
				
			||||||
		t.Fatal("deployer was not invoked")
 | 
							t.Fatal("deployer was not invoked")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TestDeployDomain ensures that the effective domain is dervied from
 | 
				
			||||||
 | 
					// directory structure.  See the unit tests for pathToDomain for details.
 | 
				
			||||||
 | 
					func TestDeployDomain(t *testing.T) {
 | 
				
			||||||
 | 
						// the mock dns provider does nothing but receive the caluclated
 | 
				
			||||||
 | 
						// domain name via it's Provide(domain) method, which is the value
 | 
				
			||||||
 | 
						// being tested here.
 | 
				
			||||||
 | 
						dnsProvider := mock.NewDNSProvider()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						client, err := client.New(
 | 
				
			||||||
 | 
							client.WithRoot("./testdata/example.com"), // set function root
 | 
				
			||||||
 | 
							client.WithDomainSearchLimit(1),           // Limit recursion to one level
 | 
				
			||||||
 | 
							client.WithDNSProvider(dnsProvider),       // will receive the final value
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if err := client.Deploy(); err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !dnsProvider.ProvideInvoked {
 | 
				
			||||||
 | 
							t.Fatal("dns provider was not invoked")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if dnsProvider.NameRequested != "example.com" {
 | 
				
			||||||
 | 
							t.Fatalf("expected 'example.com', got '%v'", dnsProvider.NameRequested)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TestDeploySubdomain ensures that a subdirectory is interpreted as a subdomain
 | 
				
			||||||
 | 
					// when calculating final domain.  See the unit tests for pathToDomain for the
 | 
				
			||||||
 | 
					// details and edge cases of this caluclation.
 | 
				
			||||||
 | 
					func TestDeploySubdomain(t *testing.T) {
 | 
				
			||||||
 | 
						dnsProvider := mock.NewDNSProvider()
 | 
				
			||||||
 | 
						client, err := client.New(
 | 
				
			||||||
 | 
							client.WithRoot("./testdata/example.com/admin"),
 | 
				
			||||||
 | 
							client.WithDomainSearchLimit(2),
 | 
				
			||||||
 | 
							client.WithDNSProvider(dnsProvider),
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if err := client.Deploy(); err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !dnsProvider.ProvideInvoked {
 | 
				
			||||||
 | 
							t.Fatal("dns provider was not invoked")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if dnsProvider.NameRequested != "admin.example.com" {
 | 
				
			||||||
 | 
							t.Fatalf("expected 'admin.example.com', got '%v'", dnsProvider.NameRequested)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -37,7 +37,10 @@ func create(cmd *cobra.Command, args []string) (err error) {
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Instantiate a client, specifying optional verbosity.
 | 
						// Instantiate a client, specifying optional verbosity.
 | 
				
			||||||
	client := client.New(client.WithVerbose(verbose))
 | 
						client, err := client.New(client.WithVerbose(verbose))
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Invoke Service Funcation creation.
 | 
						// Invoke Service Funcation creation.
 | 
				
			||||||
	if err = client.Create(language); err != nil {
 | 
						if err = client.Create(language); err != nil {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue