Skip to content

Commit

Permalink
Merge branch 'master' into contributing
Browse files Browse the repository at this point in the history
  • Loading branch information
o-liver authored Sep 13, 2024
2 parents 07ef3ac + 1d659c7 commit 9ef7a1f
Show file tree
Hide file tree
Showing 4 changed files with 143 additions and 23 deletions.
2 changes: 1 addition & 1 deletion pkg/abap/aakaas/componentVersion.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ func (c *ComponentVersion) ConstructComponentVersion(repo abaputils.Repository,
if err := c.constructVersionable(repo.Name, repo.VersionYAML, conn, cvQueryURL); err != nil {
return err
}
if err := c.resolveNext(statusFilterCV); err != nil {
if err := c.resolveWildCards(statusFilterCV); err != nil {
return err
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/abap/aakaas/productVersion.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ func (p *ProductVersion) ConstructProductversion(desc abaputils.AddonDescriptor,
if err := p.constructVersionable(desc.AddonProduct, desc.AddonVersionYAML, conn, pvQueryURL); err != nil {
return err
}
if err := p.resolveNext(statusFilterPV); err != nil {
if err := p.resolveWildCards(statusFilterPV); err != nil {
return err
}
return nil
Expand Down
56 changes: 43 additions & 13 deletions pkg/abap/aakaas/versionables.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ import (
"github.com/pkg/errors"
)

const wildCard string = "NEXT"
const wildCardNext string = "NEXT"
const wildCardMax string = "MAXX"
const statusFilterCV string = "DeliveryStatus eq 'R'"
const statusFilterPV string = "DeliveryStatus eq 'T' or DeliveryStatus eq 'P'"

Expand Down Expand Up @@ -51,21 +52,31 @@ func (v *versionable) constructVersionable(name string, dottedVersionString stri
return nil
}

func (v *versionable) resolveWildCards(statusFilter string) error {
if err := v.resolveNext(statusFilter); err != nil {
return err
}
if err := v.resolveMax(statusFilter); err != nil {
return err
}
return nil
}

func (v *versionable) resolveNext(statusFilter string) error {

switch strings.Count(v.Version, wildCard) {
switch strings.Count(v.Version, wildCardNext) {
case 0:
return nil
case 1:
log.Entry().Info("Wildcard detected in dotted-version-string. Looking up highest existing package in AAKaaS...")
var err error
switch wildCard {
switch wildCardNext {
case v.TechRelease:
err = v.resolveRelease(statusFilter)
err = v.resolveRelease(statusFilter, 1)
case v.TechSpLevel:
err = v.resolveSpLevel(statusFilter)
err = v.resolveSpLevel(statusFilter, 1)
case v.TechPatchLevel:
err = v.resolvePatchLevel(statusFilter)
err = v.resolvePatchLevel(statusFilter, 1)
}
if err != nil {
return err
Expand All @@ -74,13 +85,32 @@ func (v *versionable) resolveNext(statusFilter string) error {
return err
}
default:
return errors.New("The dotted-version-string must contain only one wildcard " + wildCard)
return errors.New("The dotted-version-string must contain only one wildcard " + wildCardNext)
}

return nil
}

func (v *versionable) resolveRelease(statusFilter string) error {
func (v *versionable) resolveMax(statusFilter string) error {
if v.TechRelease == wildCardMax {
if err := v.resolveRelease(statusFilter, 0); err != nil {
return err
}
}
if v.TechSpLevel == wildCardMax {
if err := v.resolveSpLevel(statusFilter, 0); err != nil {
return err
}
}
if v.TechPatchLevel == wildCardMax {
if err := v.resolvePatchLevel(statusFilter, 0); err != nil {
return err
}
}
return nil
}

func (v *versionable) resolveRelease(statusFilter string, increment int) error {
filter := "Name eq '" + v.Name + "' and TechSpLevel eq '0000' and TechPatchLevel eq '0000' and ( " + statusFilter + " )"
orderBy := "TechRelease desc"

Expand All @@ -90,13 +120,13 @@ func (v *versionable) resolveRelease(statusFilter string) error {
if newRelease, err := strconv.Atoi(queryResuult.TechRelease); err != nil {
return err
} else {
v.TechRelease = strconv.Itoa(newRelease + 1)
v.TechRelease = strconv.Itoa(newRelease + increment)
return nil
}
}
}

func (v *versionable) resolveSpLevel(statusFilter string) error {
func (v *versionable) resolveSpLevel(statusFilter string, increment int) error {
filter := "Name eq '" + v.Name + "' and TechRelease eq '" + v.TechRelease + "' and TechPatchLevel eq '0000' and ( " + statusFilter + " )"
orderBy := "TechSpLevel desc"

Expand All @@ -106,13 +136,13 @@ func (v *versionable) resolveSpLevel(statusFilter string) error {
if newSpLevel, err := strconv.Atoi(queryResuult.TechSpLevel); err != nil {
return err
} else {
v.TechSpLevel = fmt.Sprintf("%04d", newSpLevel+1)
v.TechSpLevel = fmt.Sprintf("%04d", newSpLevel+increment)
return nil
}
}
}

func (v *versionable) resolvePatchLevel(statusFilter string) error {
func (v *versionable) resolvePatchLevel(statusFilter string, increment int) error {
filter := "Name eq '" + v.Name + "' and TechRelease eq '" + v.TechRelease + "' and TechSpLevel eq '" + v.TechSpLevel + "' and ( " + statusFilter + " )"
orderBy := "TechPatchLevel desc"

Expand All @@ -122,7 +152,7 @@ func (v *versionable) resolvePatchLevel(statusFilter string) error {
if newPatchLevel, err := strconv.Atoi(queryResuult.TechPatchLevel); err != nil {
return err
} else {
v.TechPatchLevel = fmt.Sprintf("%04d", newPatchLevel+1)
v.TechPatchLevel = fmt.Sprintf("%04d", newPatchLevel+increment)
return nil
}
}
Expand Down
106 changes: 98 additions & 8 deletions pkg/abap/aakaas/versionables_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ func TestCvResolve(t *testing.T) {
})
t.Run("ComponentVersion NEXT Release Existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetReleaseExisting)
err := vers.constructVersionable("DummyComp", wildCard+".0.0", *conn, cvQueryURL)
err := vers.constructVersionable("DummyComp", wildCardNext+".0.0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterCV)
assert.NoError(t, err)
Expand All @@ -54,7 +54,7 @@ func TestCvResolve(t *testing.T) {
})
t.Run("ComponentVersion NEXT Release Non Existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetReleaseNonExisting)
err := vers.constructVersionable("DummyComp", wildCard+".0.0", *conn, cvQueryURL)
err := vers.constructVersionable("DummyComp", wildCardNext+".0.0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterCV)
assert.NoError(t, err)
Expand All @@ -65,7 +65,7 @@ func TestCvResolve(t *testing.T) {
})
t.Run("ComponentVersion NEXT SP Level Existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetSpLevelExisting)
err := vers.constructVersionable("DummyComp", "1."+wildCard+".0", *conn, cvQueryURL)
err := vers.constructVersionable("DummyComp", "1."+wildCardNext+".0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterCV)
assert.NoError(t, err)
Expand All @@ -77,7 +77,7 @@ func TestCvResolve(t *testing.T) {
t.Run("ComponentVersion NEXT SP Level Non Existing", func(t *testing.T) {
//This one should lead to an error later on as AOI is needed - anyway we can't just produce a differen package then customized...
mc.AddData(testDataAakaasCVGetSpLevelNonExisting)
err := vers.constructVersionable("DummyComp", "1."+wildCard+".0", *conn, cvQueryURL)
err := vers.constructVersionable("DummyComp", "1."+wildCardNext+".0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterCV)
assert.NoError(t, err)
Expand All @@ -88,7 +88,7 @@ func TestCvResolve(t *testing.T) {
})
t.Run("ComponentVersion NEXT Patch Level Existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetPatchLevelExisting)
err := vers.constructVersionable("DummyComp", "1.3."+wildCard, *conn, cvQueryURL)
err := vers.constructVersionable("DummyComp", "1.3."+wildCardNext, *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterCV)
assert.NoError(t, err)
Expand All @@ -100,7 +100,7 @@ func TestCvResolve(t *testing.T) {
t.Run("ComponentVersion NEXT Patch Level Non Existing", func(t *testing.T) {
//This one should lead to an error later on as AOI is needed - anyway we can't just produce a differen package then customized...
mc.AddData(testDataAakaasCVGetPatchLevelNonExisting)
err := vers.constructVersionable("DummyComp", "1.3."+wildCard, *conn, cvQueryURL)
err := vers.constructVersionable("DummyComp", "1.3."+wildCardNext, *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterCV)
assert.NoError(t, err)
Expand All @@ -109,9 +109,10 @@ func TestCvResolve(t *testing.T) {
assert.Equal(t, "0001", vers.TechPatchLevel)
assert.Equal(t, "1.3.1", vers.Version)
})

t.Run("Product Version NEXT Release Existing", func(t *testing.T) {
mc.AddData(testDataAakaasPVGetReleaseExisting)
err := vers.constructVersionable("DummyProd", wildCard+".0.0", *conn, pvQueryURL)
err := vers.constructVersionable("DummyProd", wildCardNext+".0.0", *conn, pvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterPV)
assert.NoError(t, err)
Expand All @@ -120,9 +121,10 @@ func TestCvResolve(t *testing.T) {
assert.Equal(t, "0000", vers.TechPatchLevel)
assert.Equal(t, "2.0.0", vers.Version)
})

t.Run("Product Version NEXT Release Non Existing", func(t *testing.T) {
mc.AddData(testDataAakaasPVGetReleaseNonExisting)
err := vers.constructVersionable("DummyProd", wildCard+".0.0", *conn, pvQueryURL)
err := vers.constructVersionable("DummyProd", wildCardNext+".0.0", *conn, pvQueryURL)
assert.NoError(t, err)
err = vers.resolveNext(statusFilterPV)
assert.NoError(t, err)
Expand All @@ -131,4 +133,92 @@ func TestCvResolve(t *testing.T) {
assert.Equal(t, "0000", vers.TechPatchLevel)
assert.Equal(t, "1.0.0", vers.Version)
})

t.Run("Component Version MAX Release existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetReleaseExisting)
err := vers.constructVersionable("DummyComp", wildCardMax+".0.0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterCV)
assert.NoError(t, err)
assert.Equal(t, "1", vers.TechRelease)
assert.Equal(t, "0000", vers.TechSpLevel)
assert.Equal(t, "0000", vers.TechPatchLevel)
})

t.Run("Component Version MAX Release non existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetReleaseNonExisting)
err := vers.constructVersionable("DummyComp", wildCardMax+".0.0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterCV)
assert.NoError(t, err)
assert.Equal(t, "0", vers.TechRelease)
assert.Equal(t, "0000", vers.TechSpLevel)
assert.Equal(t, "0000", vers.TechPatchLevel)
})

t.Run("Component Version MAX SP Level existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetSpLevelExisting)
err := vers.constructVersionable("DummyComp", "1."+wildCardMax+".0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterCV)
assert.NoError(t, err)
assert.Equal(t, "1", vers.TechRelease)
assert.Equal(t, "0007", vers.TechSpLevel)
assert.Equal(t, "0000", vers.TechPatchLevel)
})

t.Run("Component Version MAX SP Level non existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetSpLevelNonExisting)
err := vers.constructVersionable("DummyComp", "1."+wildCardMax+".0", *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterCV)
assert.NoError(t, err)
assert.Equal(t, "1", vers.TechRelease)
assert.Equal(t, "0000", vers.TechSpLevel)
assert.Equal(t, "0000", vers.TechPatchLevel)
})

t.Run("Component Version MAX Patch Level existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetPatchLevelExisting)
err := vers.constructVersionable("DummyComp", "1.3."+wildCardMax, *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterCV)
assert.NoError(t, err)
assert.Equal(t, "1", vers.TechRelease)
assert.Equal(t, "0003", vers.TechSpLevel)
assert.Equal(t, "0046", vers.TechPatchLevel)
})

t.Run("Component Version MAX Patch Level non existing", func(t *testing.T) {
mc.AddData(testDataAakaasCVGetPatchLevelNonExisting)
err := vers.constructVersionable("DummyComp", "1.3."+wildCardMax, *conn, cvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterCV)
assert.NoError(t, err)
assert.Equal(t, "1", vers.TechRelease)
assert.Equal(t, "0003", vers.TechSpLevel)
assert.Equal(t, "0000", vers.TechPatchLevel)
})

t.Run("Product Version MAX Release existing", func(t *testing.T) {
mc.AddData(testDataAakaasPVGetReleaseExisting)
err := vers.constructVersionable("DummyProd", wildCardMax+".0.0", *conn, pvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterPV)
assert.NoError(t, err)
assert.Equal(t, "1", vers.TechRelease)
assert.Equal(t, "0000", vers.TechSpLevel)
assert.Equal(t, "0000", vers.TechPatchLevel)
})

t.Run("Product Version MAX Release non existing", func(t *testing.T) {
mc.AddData(testDataAakaasPVGetReleaseNonExisting)
err := vers.constructVersionable("DummyProd", wildCardMax+".0.0", *conn, pvQueryURL)
assert.NoError(t, err)
err = vers.resolveMax(statusFilterPV)
assert.NoError(t, err)
assert.Equal(t, "0", vers.TechRelease)
assert.Equal(t, "0000", vers.TechSpLevel)
assert.Equal(t, "0000", vers.TechPatchLevel)
})
}

0 comments on commit 9ef7a1f

Please sign in to comment.