Skip to content

Commit

Permalink
Merge pull request #118 from 030/113-download-groups
Browse files Browse the repository at this point in the history
[GH-113] code smells
  • Loading branch information
030 committed Mar 28, 2020
2 parents 3d65189 + 7291ccd commit 4f45d51
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 59 deletions.
2 changes: 1 addition & 1 deletion cli/backup.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ type Nexus3 struct {
func (n Nexus3) downloadURL(token string) ([]byte, error) {
assetURL := n.URL + assetURI1 + n.APIVersion + assetURI2 + n.Repository
constructDownloadURL := assetURL
if !(token == "null") {
if token != "null" {
constructDownloadURL = assetURL + "&continuationToken=" + token
}
u, err := url.Parse(constructDownloadURL)
Expand Down
105 changes: 59 additions & 46 deletions cli/upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"os"
"path/filepath"
"strconv"
"strings"

mp "github.com/030/go-multipart/utils"
Expand Down Expand Up @@ -39,60 +40,72 @@ func (n Nexus3) detectFoldersWithPOM(d string) error {
return nil
}

// Upload posts an artifact as a multipart to a specific nexus3 repository
func (n Nexus3) Upload() error {
if err := n.detectFoldersWithPOM(n.Repository); err != nil {
return err
}

for _, v := range foldersWithPOMStringSlice {
var s strings.Builder
err := filepath.Walk(v, func(path string, f os.FileInfo, err error) error {
if err != nil {
return err
}

if !f.IsDir() {
if filepath.Ext(path) == ".pom" {
log.Debug("POM found " + path)
s.WriteString("maven2.asset1=@" + path + ",")
s.WriteString("maven2.asset1.extension=pom,")
}
func sbArtifact(path string, ext string, number string) string {
log.Debug(ext + " found " + path)
return "maven2.asset" + number + "=@" + path + ",maven2.asset" + number + ".extension=" + ext + ","
}

if filepath.Ext(path) == ".jar" {
log.Debug("JAR found " + path)
s.WriteString("maven2.asset2=@" + path + ",")
s.WriteString("maven2.asset2.extension=jar,")
}
func artifactTypeDetector(path string, sb strings.Builder) strings.Builder {
switch ext := filepath.Ext(path); ext {
case ".pom":
sb.WriteString(sbArtifact(path, "pom", "1"))
case ".jar":
sb.WriteString(sbArtifact(path, "jar", "2"))
case ".war":
sb.WriteString(sbArtifact(path, "war", "3"))
case ".zip":
sb.WriteString(sbArtifact(path, "zip", "42"))
default:
log.Debug(path + " not an artifact")
}
return sb
}

if filepath.Ext(path) == ".war" {
log.Debug("WAR found " + path)
s.WriteString("maven2.asset3=@" + path + ",")
s.WriteString("maven2.asset3.extension=war,")
}
func (n Nexus3) multipartUpload(sb strings.Builder) error {
multipartString := strings.TrimSuffix(sb.String(), ",")
url := n.URL + "/service/rest/" + n.APIVersion + "/components?repository=" + n.Repository
log.WithFields(log.Fields{
"multipart": multipartString,
"url": url,
}).Debug("URL")

if filepath.Ext(path) == ".zip" {
log.Debug("ZIP found " + path)
s.WriteString("maven2.asset42=@" + path + ",")
s.WriteString("maven2.asset42.extension=zip,")
}
}
return nil
})
u := mp.Upload{URL: url, Username: n.User, Password: n.Pass}
if err := u.MultipartUpload(multipartString); err != nil {
return err
}
return nil
}

func pomDirs(p string) (strings.Builder, error) {
var sb strings.Builder
err := filepath.Walk(p, func(path string, f os.FileInfo, err error) error {
if err != nil {
return err
}
if !f.IsDir() {
sb = artifactTypeDetector(path, sb)
}
return nil
})
if err != nil {
return sb, err
}
return sb, nil
}

multipartString := strings.TrimSuffix(s.String(), ",")
url := n.URL + "/service/rest/" + n.APIVersion + "/components?repository=" + n.Repository
log.WithFields(log.Fields{
"multipart": multipartString,
"url": url,
}).Debug("URL")

u := mp.Upload{URL: url, Username: n.User, Password: n.Pass}
if err := u.MultipartUpload(multipartString); err != nil {
// Upload posts an artifact as a multipart to a specific nexus3 repository
func (n Nexus3) Upload() error {
if err := n.detectFoldersWithPOM(n.Repository); err != nil {
return err
}
for i, path := range foldersWithPOMStringSlice {
log.Info(strconv.Itoa(i) + " Detecting artifacts in folder '" + path + "'")
sb, err := pomDirs(path)
if err != nil {
return err
}
log.Info(strconv.Itoa(i) + " Upload '" + sb.String() + "'")
if err := n.multipartUpload(sb); err != nil {
return err
}
}
Expand Down
8 changes: 5 additions & 3 deletions cli/upload_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@ import (
log "github.com/sirupsen/logrus"
)

const errExpMsg = "Error expected. Got '%v'. Want '%v'"

func TestUploads(t *testing.T) {
d := "maven-releases"

// if upload repository does not exist
err := n.detectFoldersWithPOM(d)
want := "lstat " + d + ": no such file or directory"
if err.Error() != want {
t.Errorf("Error expected. Got '%v'. Want '%v'", err, want)
t.Errorf(errExpMsg, err, want)
}

// if upload repository exists, without .pom files
Expand All @@ -26,7 +28,7 @@ func TestUploads(t *testing.T) {
err = n.detectFoldersWithPOM(d)
want = "no folders with .pom files detected. Please check whether the '" + d + "' directory contains .pom files"
if err.Error() != want {
t.Errorf("Error expected. Got '%v'. Want '%v'", err, want)
t.Errorf(errExpMsg, err, want)
}

// happy
Expand All @@ -44,7 +46,7 @@ func TestUploads(t *testing.T) {
err = n.Upload()
want = "HTTPStatusCode: '400'; ResponseMessage: 'Repository does not allow updating assets: maven-releases'; ErrorMessage: '<nil>'"
if err.Error() != want {
t.Errorf("Error expected. Got '%v'. Want '%v'", err, want)
t.Errorf(errExpMsg, err, want)
}

// cleanup
Expand Down
18 changes: 9 additions & 9 deletions integration-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ artifact(){
}

files(){
for a in $(seq 10); do artifact "${a}"; done
for a in $(seq 100); do artifact "${a}"; done
}

upload(){
Expand All @@ -74,11 +74,11 @@ backup(){
$TOOL backup -n http://localhost:9999 -u admin -p $PASSWORD -r maven-releases -v "${NEXUS_API_VERSION}" -z

if [ "${NEXUS_VERSION}" == "3.9.0" ]; then
count_downloads 30
test_zip 16
count_downloads 300
test_zip 132
else
count_downloads 40
test_zip 20
count_downloads 400
test_zip 168
fi

cleanup_downloads
Expand All @@ -94,11 +94,11 @@ repositories(){
$cmd -b -z

if [ "${NEXUS_VERSION}" == "3.9.0" ]; then
count_downloads 60
test_zip 28
count_downloads 600
test_zip 256
else
count_downloads 80
test_zip 36
count_downloads 800
test_zip 336
fi

cleanup_downloads
Expand Down

0 comments on commit 4f45d51

Please sign in to comment.