Merge pull request #69 from rusenask/feature/wrong_version_bugfix

Feature/wrong version bugfix
pull/70/head
Karolis Rusenas 2017-07-30 21:51:31 +01:00 committed by GitHub
commit b8a33c15ca
5 changed files with 155 additions and 22 deletions

View File

@ -318,6 +318,64 @@ func TestProcessEvent(t *testing.T) {
}
}
func TestProcessEventBuildNumber(t *testing.T) {
fp := &fakeImplementer{}
fp.namespaces = &v1.NamespaceList{
Items: []v1.Namespace{
v1.Namespace{
meta_v1.TypeMeta{},
meta_v1.ObjectMeta{Name: "xxxx"},
v1.NamespaceSpec{},
v1.NamespaceStatus{},
},
},
}
fp.deploymentList = &v1beta1.DeploymentList{
Items: []v1beta1.Deployment{
v1beta1.Deployment{
meta_v1.TypeMeta{},
meta_v1.ObjectMeta{
Name: "deployment-1",
Namespace: "xxxx",
Labels: map[string]string{types.KeelPolicyLabel: "all"},
},
v1beta1.DeploymentSpec{
Template: v1.PodTemplateSpec{
Spec: v1.PodSpec{
Containers: []v1.Container{
v1.Container{
Image: "gcr.io/v2-namespace/hello-world:10",
},
},
},
},
},
v1beta1.DeploymentStatus{},
},
},
}
provider, err := NewProvider(fp, &fakeSender{})
if err != nil {
t.Fatalf("failed to get provider: %s", err)
}
repo := types.Repository{
Name: "gcr.io/v2-namespace/hello-world",
Tag: "11",
}
event := &types.Event{Repository: repo}
_, err = provider.processEvent(event)
if err != nil {
t.Errorf("got error while processing event: %s", err)
}
if fp.updated.Spec.Template.Spec.Containers[0].Image != repo.Name+":"+repo.Tag {
t.Errorf("expected to find a deployment with updated image but found: %s", fp.updated.Spec.Template.Spec.Containers[0].Image)
}
}
// Test to check how many deployments are "impacted" if we have sidecar container
func TestGetImpactedTwoContainersInSameDeployment(t *testing.T) {
fp := &fakeImplementer{}

View File

@ -50,14 +50,14 @@ type Version struct {
PreRelease string
Metadata string
Prefix string // v prefix
Original string
}
func (v Version) String() string {
var buf bytes.Buffer
if v.Prefix != "" {
fmt.Fprintf(&buf, v.Prefix)
if v.Original != "" {
return v.Original
}
var buf bytes.Buffer
fmt.Fprintf(&buf, "%d.%d.%d", v.Major, v.Minor, v.Patch)
if v.PreRelease != "" {
@ -68,6 +68,7 @@ func (v Version) String() string {
}
return buf.String()
}
// TriggerType - trigger types

View File

@ -60,7 +60,7 @@ func TestVersion_String(t *testing.T) {
Patch int64
PreRelease string
Metadata string
Prefix string
Original string
}
tests := []struct {
name string
@ -70,19 +70,20 @@ func TestVersion_String(t *testing.T) {
{
name: "semver with v",
fields: fields{
Major: 1,
Minor: 1,
Patch: 0,
Prefix: "v",
Major: 1,
Minor: 1,
Patch: 0,
Original: "v1.1.0",
},
want: "v1.1.0",
},
{
name: "semver standard",
fields: fields{
Major: 1,
Minor: 1,
Patch: 5,
Major: 1,
Minor: 1,
Patch: 5,
Original: "1.1.5",
},
want: "1.1.5",
},
@ -95,7 +96,7 @@ func TestVersion_String(t *testing.T) {
Patch: tt.fields.Patch,
PreRelease: tt.fields.PreRelease,
Metadata: tt.fields.Metadata,
Prefix: tt.fields.Prefix,
Original: tt.fields.Original,
}
if got := v.String(); got != tt.want {
t.Errorf("Version.String() = %v, want %v", got, tt.want)

View File

@ -19,6 +19,15 @@ var ErrVersionTagMissing = errors.New("version tag is missing")
// being parsed.
var ErrInvalidSemVer = errors.New("invalid semantic version")
// MustParse - must parse version, if fails - panics
func MustParse(version string) *types.Version {
ver, err := GetVersion(version)
if err != nil {
panic(err)
}
return ver
}
// GetVersion - parse version
func GetVersion(version string) (*types.Version, error) {
@ -29,11 +38,6 @@ func GetVersion(version string) (*types.Version, error) {
}
return nil, err
}
// TODO: probably make it customazible
prefix := ""
if strings.HasPrefix(version, "v") {
prefix = "v"
}
return &types.Version{
Major: v.Major(),
@ -41,7 +45,7 @@ func GetVersion(version string) (*types.Version, error) {
Patch: v.Patch(),
PreRelease: string(v.Prerelease()),
Metadata: v.Metadata(),
Prefix: prefix,
Original: v.Original(),
}, nil
}

View File

@ -20,13 +20,13 @@ func TestGetVersionFromImageName(t *testing.T) {
{
name: "image",
args: args{name: "karolis/webhook-demo:1.4.5"},
want: &types.Version{Major: 1, Minor: 4, Patch: 5},
want: MustParse("1.4.5"),
wantErr: false,
},
{
name: "semver with v prefix",
args: args{name: "gcr.io/stemnapp/alpine-api:v0.0.824"},
want: &types.Version{Major: 0, Minor: 0, Patch: 824, Prefix: "v"},
want: MustParse("v0.0.824"),
wantErr: false,
},
{
@ -42,7 +42,18 @@ func TestGetVersionFromImageName(t *testing.T) {
{
name: "image webhookrelay",
args: args{name: "gcr.io/webhookrelay/webhookrelay:0.1.14"},
want: &types.Version{Major: 0, Minor: 1, Patch: 14},
want: MustParse("0.1.14"),
wantErr: false,
},
{
name: "non semver, missing minor and patch",
args: args{name: "index.docker.io/application:42"},
want: &types.Version{
Major: 42,
Minor: 0,
Patch: 0,
Original: "42",
},
wantErr: false,
},
}
@ -282,3 +293,61 @@ func TestNewAvailable(t *testing.T) {
})
}
}
func TestGetVersion(t *testing.T) {
type args struct {
version string
}
tests := []struct {
name string
args args
want *types.Version
wantErr bool
}{
{
name: "normal version",
args: args{version: "1.2.3"},
want: &types.Version{
Major: 1,
Minor: 2,
Patch: 3,
Original: "1.2.3",
},
wantErr: false,
},
{
name: "legacy semver version",
args: args{version: "v1.2.3"},
want: &types.Version{
Major: 1,
Minor: 2,
Patch: 3,
Original: "v1.2.3",
},
wantErr: false,
},
{
name: "not semver",
args: args{version: "23"},
want: &types.Version{
Major: 23,
Minor: 0,
Patch: 0,
Original: "23",
},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := GetVersion(tt.args.version)
if (err != nil) != tt.wantErr {
t.Errorf("GetVersion() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("GetVersion() = %v, want %v", got, tt.want)
}
})
}
}