|
|
@@ -19,44 +19,148 @@ package convert
|
|
|
import (
|
|
|
"testing"
|
|
|
|
|
|
+ "github.com/Azure/azure-sdk-for-go/profiles/latest/containerinstance/mgmt/containerinstance"
|
|
|
+ "github.com/Azure/go-autorest/autorest/to"
|
|
|
+ "github.com/compose-spec/compose-go/types"
|
|
|
+
|
|
|
"github.com/docker/api/compose"
|
|
|
+ "github.com/docker/api/containers"
|
|
|
"github.com/docker/api/context/store"
|
|
|
|
|
|
+ . "github.com/onsi/gomega"
|
|
|
"github.com/stretchr/testify/require"
|
|
|
"github.com/stretchr/testify/suite"
|
|
|
)
|
|
|
|
|
|
-const (
|
|
|
- projectName = "TEST"
|
|
|
- expectedProjectName = "test"
|
|
|
-)
|
|
|
-
|
|
|
type ConvertTestSuite struct {
|
|
|
suite.Suite
|
|
|
- ctx store.AciContext
|
|
|
- project compose.Project
|
|
|
+ ctx store.AciContext
|
|
|
}
|
|
|
|
|
|
func (suite *ConvertTestSuite) BeforeTest(suiteName, testName string) {
|
|
|
- ctx := store.AciContext{
|
|
|
+ suite.ctx = store.AciContext{
|
|
|
SubscriptionID: "subID",
|
|
|
ResourceGroup: "rg",
|
|
|
Location: "eu",
|
|
|
}
|
|
|
+}
|
|
|
+
|
|
|
+func (suite *ConvertTestSuite) TestProjectName() {
|
|
|
project := compose.Project{
|
|
|
- Name: projectName,
|
|
|
+ Name: "TEST",
|
|
|
+ }
|
|
|
+ containerGroup, err := ToContainerGroup(suite.ctx, project)
|
|
|
+ require.NoError(suite.T(), err)
|
|
|
+ require.Equal(suite.T(), *containerGroup.Name, "test")
|
|
|
+}
|
|
|
+
|
|
|
+func (suite *ConvertTestSuite) TestContainerGroupToContainer() {
|
|
|
+ myContainerGroup := containerinstance.ContainerGroup{
|
|
|
+ ContainerGroupProperties: &containerinstance.ContainerGroupProperties{
|
|
|
+ IPAddress: &containerinstance.IPAddress{
|
|
|
+ Ports: &[]containerinstance.Port{{
|
|
|
+ Port: to.Int32Ptr(80),
|
|
|
+ }},
|
|
|
+ IP: to.StringPtr("42.42.42.42"),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ myContainer := containerinstance.Container{
|
|
|
+ Name: to.StringPtr("myContainerID"),
|
|
|
+ ContainerProperties: &containerinstance.ContainerProperties{
|
|
|
+ Image: to.StringPtr("sha256:666"),
|
|
|
+ Command: to.StringSlicePtr([]string{"mycommand"}),
|
|
|
+ Ports: &[]containerinstance.ContainerPort{{
|
|
|
+ Port: to.Int32Ptr(80),
|
|
|
+ }},
|
|
|
+ EnvironmentVariables: nil,
|
|
|
+ InstanceView: &containerinstance.ContainerPropertiesInstanceView{
|
|
|
+ RestartCount: nil,
|
|
|
+ CurrentState: &containerinstance.ContainerState{
|
|
|
+ State: to.StringPtr("Running"),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ Resources: &containerinstance.ResourceRequirements{
|
|
|
+ Limits: &containerinstance.ResourceLimits{
|
|
|
+ MemoryInGB: to.Float64Ptr(9),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
}
|
|
|
|
|
|
- suite.ctx = ctx
|
|
|
- suite.project = project
|
|
|
+ var expectedContainer = containers.Container{
|
|
|
+ ID: "myContainerID",
|
|
|
+ Status: "Running",
|
|
|
+ Image: "sha256:666",
|
|
|
+ Command: "mycommand",
|
|
|
+ MemoryLimit: 9,
|
|
|
+ Ports: []containers.Port{{
|
|
|
+ HostPort: uint32(80),
|
|
|
+ ContainerPort: uint32(80),
|
|
|
+ Protocol: "tcp",
|
|
|
+ HostIP: "42.42.42.42",
|
|
|
+ }},
|
|
|
+ }
|
|
|
+
|
|
|
+ container, err := ContainerGroupToContainer("myContainerID", myContainerGroup, myContainer)
|
|
|
+ Expect(err).To(BeNil())
|
|
|
+ Expect(container).To(Equal(expectedContainer))
|
|
|
}
|
|
|
|
|
|
-func (suite *ConvertTestSuite) TestProjectName() {
|
|
|
- containerGroup, err := ToContainerGroup(suite.ctx, suite.project)
|
|
|
- require.NoError(suite.T(), err)
|
|
|
- require.Equal(suite.T(), *containerGroup.Name, expectedProjectName)
|
|
|
+func (suite *ConvertTestSuite) TestComposeContainerGroupToContainerWithDnsSideCarSide() {
|
|
|
+ project := compose.Project{
|
|
|
+ Name: "",
|
|
|
+ Config: types.Config{
|
|
|
+ Services: []types.ServiceConfig{
|
|
|
+ {
|
|
|
+ Name: "service1",
|
|
|
+ Image: "image1",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ Name: "service2",
|
|
|
+ Image: "image2",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ group, err := ToContainerGroup(suite.ctx, project)
|
|
|
+ Expect(err).To(BeNil())
|
|
|
+ Expect(len(*group.Containers)).To(Equal(3))
|
|
|
+
|
|
|
+ Expect(*(*group.Containers)[0].Name).To(Equal("service1"))
|
|
|
+ Expect(*(*group.Containers)[1].Name).To(Equal("service2"))
|
|
|
+ Expect(*(*group.Containers)[2].Name).To(Equal(ComposeDNSSidecarName))
|
|
|
+
|
|
|
+ Expect(*(*group.Containers)[2].Command).To(Equal([]string{"sh", "-c", "echo 127.0.0.1 service1 >> /etc/hosts;echo 127.0.0.1 service2 >> /etc/hosts;sleep infinity"}))
|
|
|
+
|
|
|
+ Expect(*(*group.Containers)[0].Image).To(Equal("image1"))
|
|
|
+ Expect(*(*group.Containers)[1].Image).To(Equal("image2"))
|
|
|
+ Expect(*(*group.Containers)[2].Image).To(Equal(dnsSidecarImage))
|
|
|
+}
|
|
|
+
|
|
|
+func (suite *ConvertTestSuite) TestComposeSingleContainerGroupToContainerNoDnsSideCarSide() {
|
|
|
+ project := compose.Project{
|
|
|
+ Name: "",
|
|
|
+ Config: types.Config{
|
|
|
+ Services: []types.ServiceConfig{
|
|
|
+ {
|
|
|
+ Name: "service1",
|
|
|
+ Image: "image1",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ group, err := ToContainerGroup(suite.ctx, project)
|
|
|
+ Expect(err).To(BeNil())
|
|
|
+
|
|
|
+ Expect(len(*group.Containers)).To(Equal(1))
|
|
|
+ Expect(*(*group.Containers)[0].Name).To(Equal("service1"))
|
|
|
+ Expect(*(*group.Containers)[0].Image).To(Equal("image1"))
|
|
|
}
|
|
|
|
|
|
func TestConvertTestSuite(t *testing.T) {
|
|
|
+ RegisterTestingT(t)
|
|
|
suite.Run(t, new(ConvertTestSuite))
|
|
|
}
|