Skip to content

Commit

Permalink
Merge branch 'develop' into doc/improve-readme-and-contributing-file-…
Browse files Browse the repository at this point in the history
…issue-827
  • Loading branch information
Levente Orban authored Oct 9, 2023
2 parents 2e7fe25 + 487d114 commit 9d07df0
Show file tree
Hide file tree
Showing 11 changed files with 223 additions and 116 deletions.
40 changes: 39 additions & 1 deletion .github/workflows/product_builder.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,15 @@ jobs:
- name: Init k3d
run: make k3d-init
- name: Run integration tests
run: make k3d-test
run: |
make k3d-config && \
export KUBECONFIG="$(pwd)/k3d-auth.yaml" && \
make test-integration
- name: Upload integration test results
uses: actions/upload-artifact@v3
with:
name: golang-integration-coverage
path: ${{ env.GOLANG_WORKING_DIRECTORY }}/**.cov
go_test:
runs-on: ubuntu-22.04
needs: gather_changes
Expand All @@ -209,8 +217,38 @@ jobs:
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- name: Run unit tests with coverage
run: make test-unit-with-coverage
- name: Upload unit test results
uses: actions/upload-artifact@v3
with:
name: golang-unit-coverage
path: ${{ env.GOLANG_WORKING_DIRECTORY }}/**.cov
go_coverage_upload:
runs-on: ubuntu-22.04
needs:
- go_security
- go_lint
- go_test
- go_integration
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v4
- name: Install coverage merger
run: go install go.shabbyrobe.org/gocovmerge/cmd/gocovmerge@latest
- name: Download integration test results from artifacts
uses: actions/download-artifact@v3
with:
name: golang-integration-coverage
- name: Download unit test results from artifacts
uses: actions/download-artifact@v3
with:
name: golang-unit-coverage
- name: Merge coverage
run: gocovmerge ./builder.cov ./cli.cov ./crane.cov ./dagent.cov ./internal.cov ./unit.cov > ./merged.cov
- name: Upload coverage reports to Codecov with GitHub Action
uses: codecov/codecov-action@v3
with:
files: ./merged.cov
name: golang-coverage
go_build:
runs-on: ubuntu-22.04
needs:
Expand Down
2 changes: 1 addition & 1 deletion golang/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ tmp/
k3s.yml
k3s.yaml
k3d-auth.yaml
coverage.cov
*.cov
18 changes: 11 additions & 7 deletions golang/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ k3d-stop:

# make sure to have k3s set and configured
.PHONY: k3d-test
k3d-test: k3d-config
k3d-test: k3d-test
export KUBECONFIG='$(PWD)/k3d-auth.yaml'
go test -tags=integration -race ./pkg/crane/...

Expand All @@ -256,24 +256,28 @@ test-unit:
# dependency: valid & working k8s configuration
.PHONY: test-unit-with-coverage
test-unit-with-coverage:
go test -tags=unit -race -coverpkg=./... -coverprofile=./coverage.cov -covermode=atomic ./...
go test -tags=unit -race -coverpkg=./... -coverprofile=./unit.cov -covermode=atomic ./...

.PHONY: test-integration
test-integration: test-dagent test-crane test-cli test-internal

.PHONY: test-crane
test-crane:
go test -tags=integration -race ./pkg/crane/...
go test -tags=integration -race -coverpkg=./... -coverprofile=./crane.cov -covermode=atomic ./pkg/crane/...

.PHONY: test-internal
test-internal:
go test -tags=integration -race ./internal/...
go test -tags=integration -race ./pkg/builder/...
go test -tags=integration -race -coverpkg=./... -coverprofile=./internal.cov -covermode=atomic ./internal/...
go test -tags=integration -race -coverpkg=./... -coverprofile=./builder.cov -covermode=atomic ./pkg/builder/...

.PHONY: test-dagent
test-dagent:
go test -tags=integration -race ./pkg/dagent/...
go test -tags=integration -race -coverpkg=./... -coverprofile=./dagent.cov -covermode=atomic ./pkg/dagent/...

.PHONY: test-cli
test-cli:
go test -tags=integration -race -coverpkg=./... -coverprofile=./cli.cov -covermode=atomic ./pkg/cli/...

.PHONY: coverage
coverage:
go tool cover -func ./coverage.cov
go tool cover -func ./merged.cov
69 changes: 44 additions & 25 deletions golang/internal/helper/image/image_unit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,38 +10,57 @@ import (
"github.com/stretchr/testify/assert"

imageHelper "github.com/dyrector-io/dyrectorio/golang/internal/helper/image"
"github.com/dyrector-io/dyrectorio/golang/internal/pointer"
"github.com/dyrector-io/dyrectorio/protobuf/go/agent"
)

func TestRegistryUrl(t *testing.T) {
auth := &imageHelper.RegistryAuth{
URL: "test",
}

url := imageHelper.GetRegistryURL(nil, auth)
assert.Equal(t, url, "test")
type RegistryTestCase struct {
Name string
Registry *string
RegistryUrl *string
ExpectedUrl string
}

func TestRegistryUrlPriority(t *testing.T) {
registry := "other"
auth := &imageHelper.RegistryAuth{
URL: "test",
func TestRegistryWithTable(t *testing.T) {
testCases := []RegistryTestCase{
{
Name: "Test registry url",
Registry: pointer.NewPTR[string](""),
RegistryUrl: pointer.NewPTR[string]("test"),
ExpectedUrl: "test",
},
{
Name: "Test registry url priority",
Registry: pointer.NewPTR[string]("other"),
RegistryUrl: pointer.NewPTR[string]("test"),
ExpectedUrl: "test",
},
{
Name: "Test registry url empty",
Registry: nil,
RegistryUrl: nil,
ExpectedUrl: "",
},
{
Name: "Test registry url registry",
Registry: pointer.NewPTR[string]("other"),
RegistryUrl: nil,
ExpectedUrl: "other",
},
}

url := imageHelper.GetRegistryURL(&registry, auth)
assert.Equal(t, url, "test")
}

func TestRegistryUrlRegistry(t *testing.T) {
registry := "other"

url := imageHelper.GetRegistryURL(&registry, nil)
assert.Equal(t, url, "other")
}

func TestRegistryUrlEmpty(t *testing.T) {
url := imageHelper.GetRegistryURL(nil, nil)
assert.Equal(t, url, "")
for _, tC := range testCases {
t.Run(tC.Name, func(t *testing.T) {
if tC.RegistryUrl == nil {
url := imageHelper.GetRegistryURL(tC.Registry, nil)
assert.Equal(t, url, tC.ExpectedUrl)
} else {
auth := &imageHelper.RegistryAuth{URL: *tC.RegistryUrl}
url := imageHelper.GetRegistryURL(tC.Registry, auth)
assert.Equal(t, url, tC.ExpectedUrl)
}
})
}
}

func TestProtoRegistryUrl(t *testing.T) {
Expand Down
6 changes: 6 additions & 0 deletions golang/internal/pointer/pointer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package pointer

// Creates a new pointer of type T
func NewPTR[T any](value T) *T {
return &value
}
15 changes: 15 additions & 0 deletions golang/internal/pointer/pointer_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package pointer

import (
"testing"

"github.com/stretchr/testify/assert"
)

func TestNewPTR(t *testing.T) {
sPtr := NewPTR[string]("")
assert.Equal(t, *sPtr, "")

iPtr := NewPTR[int](120)
assert.Equal(t, *iPtr, 120)
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func assertPortBinding(t *testing.T, portMap nat.PortMap, internal, external str
}

list := portMap[lookup]
assert.Contains(t, list, nat.PortBinding{HostIP: "0.0.0.0", HostPort: external})
assert.Contains(t, list, nat.PortBinding{HostIP: "", HostPort: external})
}

func hookCallback(callback func()) containerbuilder.LifecycleFunc {
Expand Down
10 changes: 6 additions & 4 deletions golang/pkg/crane/k8s/deploy_facade.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ func (d *DeployFacade) Deploy() error {
}
}

if err := d.deployment.DeployDeployment(&deploymentParams{
if err := d.deployment.DeployDeployment(&DeploymentParams{
image: d.params.Image,
namespace: d.params.InstanceConfig.ContainerPreName,
containerConfig: &d.params.ContainerConfig,
Expand Down Expand Up @@ -270,9 +270,11 @@ func Deploy(c context.Context, dog *dogger.DeploymentLogger, deployImageRequest
dog.Write(deployImageRequest.InstanceConfig.Strings()...)
dog.Write(deployImageRequest.ContainerConfig.Strings(&cfg.CommonConfiguration)...)

imageName := util.JoinV("/",
*deployImageRequest.Registry,
util.JoinV(":", deployImageRequest.ImageName, deployImageRequest.Tag))
imageName := util.JoinV(":", deployImageRequest.ImageName, deployImageRequest.Tag)
if deployImageRequest.Registry != nil {
imageName = util.JoinV("/",
*deployImageRequest.Registry, imageName)
}

expandedImageName, err := imageHelper.ExpandImageName(imageName)
if err != nil {
Expand Down
10 changes: 5 additions & 5 deletions golang/pkg/crane/k8s/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ func NewDeployment(ctx context.Context, cfg *config.Configuration) *Deployment {
return &Deployment{status: "", ctx: ctx, appConfig: cfg}
}

type deploymentParams struct {
type DeploymentParams struct {
namespace string
image string
containerConfig *v1.ContainerConfig
Expand All @@ -63,7 +63,7 @@ type deploymentParams struct {
issuer string
}

func (d *Deployment) DeployDeployment(p *deploymentParams) error {
func (d *Deployment) DeployDeployment(p *DeploymentParams) error {
client := getDeploymentsClient(p.namespace, d.appConfig)

containerConfig, err := buildContainer(p, d.appConfig)
Expand Down Expand Up @@ -277,7 +277,7 @@ func (d *Deployment) GetPodDeployment(namespace, name string) (*kappsv1.Deployme
}

// builds the container using the builder interface, with healthchecks, volumes, configs, ports...
func buildContainer(p *deploymentParams,
func buildContainer(p *DeploymentParams,
cfg *config.Configuration,
) (*corev1.ContainerApplyConfiguration, error) {
healthCheckConfig := p.containerConfig.HealthCheckConfig
Expand Down Expand Up @@ -419,7 +419,7 @@ func getResourceManagement(resourceConfig v1.ResourceConfig,
}

// getInitContainers returns every init container specific(import/config) or custom ones
func getInitContainers(params *deploymentParams, cfg *config.Configuration) []*corev1.ContainerApplyConfiguration {
func getInitContainers(params *DeploymentParams, cfg *config.Configuration) []*corev1.ContainerApplyConfiguration {
// this is only the config container / could be general / wait for it / other init purposes
initContainers := []*corev1.ContainerApplyConfiguration{}

Expand Down Expand Up @@ -485,7 +485,7 @@ func addImportContainer(initContainers []*corev1.ContainerApplyConfiguration,
}

func addInitContainers(initContainers []*corev1.ContainerApplyConfiguration,
params *deploymentParams,
params *DeploymentParams,
) []*corev1.ContainerApplyConfiguration {
for _, iCont := range params.containerConfig.InitContainers {
container := corev1.Container().
Expand Down
Loading

0 comments on commit 9d07df0

Please sign in to comment.