Skip to content

Commit

Permalink
Move handler selection into a separate function to improve testing
Browse files Browse the repository at this point in the history
  • Loading branch information
zerok committed Sep 14, 2023
1 parent 5203571 commit d46afcd
Show file tree
Hide file tree
Showing 10 changed files with 178 additions and 384 deletions.
59 changes: 33 additions & 26 deletions scripts/move_packages.go
Original file line number Diff line number Diff line change
Expand Up @@ -388,33 +388,10 @@ func main() {
for scanner.Scan() {
var (
name = scanner.Text()
ext = filepath.Ext(name)
)

// sha256 extensions should be handled the same way what precedes the extension
if ext == sha256Ext {
ext = filepath.Ext(strings.ReplaceAll(name, sha256Ext, ""))
}

// tar.gz extensions can also have docker.tar.gz so we need to make sure we don't skip that
if ext == ".gz" {
ext = ".tar.gz"
if filepath.Ext(strings.ReplaceAll(name, ".tar.gz", "")) == ".docker" ||
filepath.Ext(strings.ReplaceAll(name, ".tar.gz.sha256", "")) == ".docker" {
ext = ".docker.tar.gz"
}
}
log.Printf("[%s] Using handler for %s", name, ext)

handler := Handlers[ext]
handler, ext := getHandler(name, Handlers)
destinations := handler(name)
if ext == "" {
destinations := make([]string, 0)
if filepath.Base(name) == "public" {
destinations = CDNHandler(name)
}
if filepath.Base(name) == "storybook" {
destinations = StorybookHandler(name)
}
for _, v := range destinations {
dir := filepath.Join(prefix, filepath.Dir(v))
v := filepath.Join(prefix, v)
Expand All @@ -435,7 +412,6 @@ func main() {
continue
}

destinations := handler(name)
log.Println("File:", name, "to be copied as", destinations)
for _, v := range destinations {
dir := filepath.Join(prefix, filepath.Dir(v))
Expand Down Expand Up @@ -475,3 +451,34 @@ func main() {
fmt.Fprint(os.Stdout, stdout)
fmt.Fprint(os.Stderr, stderr)
}

func getHandler(name string, handlers map[string]HandlerFunc) (HandlerFunc, string) {
ext := filepath.Ext(name)
// sha256 extensions should be handled the same way what precedes the extension
if ext == sha256Ext {
ext = filepath.Ext(strings.ReplaceAll(name, sha256Ext, ""))
}

// tar.gz extensions can also have docker.tar.gz so we need to make sure we don't skip that
if ext == ".gz" {
ext = ".tar.gz"
if filepath.Ext(strings.ReplaceAll(name, ".tar.gz", "")) == ".docker" ||
filepath.Ext(strings.ReplaceAll(name, ".tar.gz.sha256", "")) == ".docker" {
ext = ".docker.tar.gz"
}
}

handler := handlers[ext]
// If there is no extension, then we are either dealing with public assets
// or the storybook, which both require some extra handling:
if ext == "" {
if filepath.Base(name) == "public" {
handler = CDNHandler
}
if filepath.Base(name) == "storybook" {
handler = StorybookHandler
}
}
log.Printf("[%s] Using handler for %s", name, ext)
return handler, ext
}
35 changes: 4 additions & 31 deletions scripts/move_packages_cdn_test.go
Original file line number Diff line number Diff line change
@@ -1,50 +1,23 @@
package main

import (
"sort"
"testing"
)

var cdnMapping = []m{
{
var cdnMapping = map[string]m{
"OSS: Linux AMD64": {
input: "gs://bucket/tag/grafana_v1.2.3_102_linux_amd64/public",
output: []string{
"artifacts/static-assets/grafana-oss/1.2.3/public",
"artifacts/static-assets/grafana/1.2.3/public",
},
},
{
"ENT: Linux AMD64": {
input: "gs://bucket/tag/grafana-enterprise_v1.2.3_102_linux_amd64/public",
output: []string{
"artifacts/static-assets/grafana-enterprise/1.2.3/public",
},
},
{
"PRO: Linux AMD64": {
input: "gs://bucket/tag/grafana-pro_v1.2.3_102_linux_amd64/public",
output: []string{
"artifacts/static-assets/grafana-pro/1.2.3/public",
},
},
}

func TestMoveCDN(t *testing.T) {
for _, v := range cdnMapping {
out := CDNHandler(v.input)

if len(out) != len(v.output) {
t.Errorf("expected %d in output but received %d\nexpected: %v\nreceived: %v", len(v.output), len(out), v.output, out)
continue
}
sort.Strings(out)
exp := v.output
sort.Strings(exp)

for i := range out {
got := out[i]
expect := exp[i]
if expect != got {
t.Errorf("\nExpected %s\nReceived %s", expect, got)
}
}
}
}
71 changes: 19 additions & 52 deletions scripts/move_packages_deb_test.go
Original file line number Diff line number Diff line change
@@ -1,145 +1,112 @@
package main

import (
"sort"
"testing"
)

var debMapping = []m{
{
var debMapping = map[string]m{
"OSS: Linux AMD64": {
input: "gs://bucket/tag/grafana_v1.2.3_102_linux_amd64.deb",
output: []string{
"artifacts/downloads/v1.2.3/oss/release/grafana_1.2.3_amd64.deb",
},
},
{
"OSS: Linux AMD64 SHA256": {
input: "gs://bucket/tag/grafana_v1.2.3_102_linux_amd64.deb.sha256",
output: []string{
"artifacts/downloads/v1.2.3/oss/release/grafana_1.2.3_amd64.deb.sha256",
},
},
{
input: "gs://bucket/tag/grafana_v1.2.3_102_linux_arm-7.deb",
output: []string{
"artifacts/downloads/v1.2.3/oss/release/grafana_1.2.3_armhf.deb",
},
},
{
"OSS: Linux ARM7": {
input: "gs://bucket/tag/grafana_v1.2.3_102_linux_arm-7.deb",
output: []string{
"artifacts/downloads/v1.2.3/oss/release/grafana_1.2.3_armhf.deb",
},
},
{
"OSS: RPI ARM7": {
input: "gs://bucket/tag/grafana-rpi_v1.2.3_102_linux_arm-7.deb",
output: []string{
"artifacts/downloads/v1.2.3/oss/release/grafana-rpi_1.2.3_armhf.deb",
},
},
{
"OSS: RPI ARM6": {
input: "gs://bucket/tag/grafana-rpi_v1.2.3_102_linux_arm-6.deb",
output: []string{
"artifacts/downloads/v1.2.3/oss/release/grafana-rpi_1.2.3_armhf.deb",
},
},
{
"OSS: Linux ARM7 SHA256": {
input: "gs://bucket/tag/grafana_v1.2.3_102_linux_arm-7.deb.sha256",
output: []string{
"artifacts/downloads/v1.2.3/oss/release/grafana_1.2.3_armhf.deb.sha256",
},
},
{
"OSS: Linux ARM64": {
input: "gs://bucket/tag/grafana_v1.2.3_102_linux_arm64.deb",
output: []string{
"artifacts/downloads/v1.2.3/oss/release/grafana_1.2.3_arm64.deb",
},
},
{
"OSS: Linux ARM64 SHA256": {
input: "gs://bucket/tag/grafana_v1.2.3_102_linux_arm64.deb.sha256",
output: []string{
"artifacts/downloads/v1.2.3/oss/release/grafana_1.2.3_arm64.deb.sha256",
},
},
{
"ENT: Linux AMD64": {
input: "gs://bucket/tag/grafana-enterprise_v1.2.3_102_linux_amd64.deb",
output: []string{
"artifacts/downloads/v1.2.3/enterprise/release/grafana-enterprise_1.2.3_amd64.deb",
},
},
{
"ENT: Linux AMD64 SHA256": {
input: "gs://bucket/tag/grafana-enterprise_v1.2.3_102_linux_amd64.deb.sha256",
output: []string{
"artifacts/downloads/v1.2.3/enterprise/release/grafana-enterprise_1.2.3_amd64.deb.sha256",
},
},
{
"ENT: Linux ARM64": {
input: "gs://bucket/tag/grafana-enterprise_v1.2.3_102_linux_arm64.deb",
output: []string{
"artifacts/downloads/v1.2.3/enterprise/release/grafana-enterprise_1.2.3_arm64.deb",
},
},
{
"ENT: Linux ARM64 SHA256": {
input: "gs://bucket/tag/grafana-enterprise_v1.2.3_102_linux_arm64.deb.sha256",
output: []string{
"artifacts/downloads/v1.2.3/enterprise/release/grafana-enterprise_1.2.3_arm64.deb.sha256",
},
},
{
"ENT: Linux ARM7": {
input: "gs://bucket/tag/grafana-enterprise_v1.2.3_102_linux_arm-7.deb",
output: []string{
"artifacts/downloads/v1.2.3/enterprise/release/grafana-enterprise_1.2.3_armhf.deb",
},
},
{
"ENT: RPI ARM7": {
input: "gs://bucket/tag/grafana-enterprise-rpi_v1.2.3_102_linux_arm-7.deb",
output: []string{
"artifacts/downloads/v1.2.3/enterprise/release/grafana-enterprise-rpi_1.2.3_armhf.deb",
},
},
{
"ENT: ARM7 SHA256": {
input: "gs://bucket/tag/grafana-enterprise_v1.2.3_102_linux_arm-7.deb.sha256",
output: []string{
"artifacts/downloads/v1.2.3/enterprise/release/grafana-enterprise_1.2.3_armhf.deb.sha256",
},
},
{
"ENT2: RPI ARM7": {
input: "gs://bucket/tag/grafana-pro-rpi_v1.2.3_102_linux_arm-7.deb",
output: []string{
"artifacts/downloads-enterprise2/v1.2.3/enterprise2/release/grafana-enterprise2-rpi_1.2.3_armhf.deb",
},
},
{
"ENT2: Pre-release AMD64": {
input: "gs://bucket/tag/grafana-pro_v1.2.3-pre.4_102_linux_amd64.deb",
output: []string{
"artifacts/downloads-enterprise2/v1.2.3-pre.4/enterprise2/release/grafana-enterprise2_1.2.3~pre.4_amd64.deb",
},
},
{
"ENT2: Pre-release AMD64 SHA256": {
input: "gs://bucket/tag/grafana-pro_v1.2.3-pre.4_102_linux_amd64.deb.sha256",
output: []string{
"artifacts/downloads-enterprise2/v1.2.3-pre.4/enterprise2/release/grafana-enterprise2_1.2.3~pre.4_amd64.deb.sha256",
},
},
}

func TestMoveDeb(t *testing.T) {
for _, v := range debMapping {
out := DebHandler(v.input)

if len(out) != len(v.output) {
t.Errorf("expected %d in output but received %d\nexpected: %v\nreceived: %v", len(v.output), len(out), v.output, out)
continue
}
sort.Strings(out)
exp := v.output
sort.Strings(exp)

for i := range out {
got := out[i]
expect := exp[i]
if expect != got {
t.Errorf("\nExpected %s\nReceived %s", expect, got)
}
}
}
}
Loading

0 comments on commit d46afcd

Please sign in to comment.