Files
TA-Deployment-Broker/internal/app/upload_test.go
T
David Schroeder 69cc236635 update
2026-07-25 14:51:48 -05:00

92 lines
2.2 KiB
Go

package app
import (
"crypto/sha256"
"encoding/hex"
"io"
"net/http"
"net/http/httptest"
"net/url"
"strings"
"testing"
)
func TestValidRegistrySegment(t *testing.T) {
t.Parallel()
valid := []string{"sentinelone-linux", "26.2.0.10", "agent_x86_64+release.deb"}
for _, value := range valid {
if !validRegistrySegment(value, 255) {
t.Errorf("expected %q to be valid", value)
}
}
invalid := []string{"", "../agent.deb", "agent/name.deb", "agent name.deb"}
for _, value := range invalid {
if validRegistrySegment(value, 255) {
t.Errorf("expected %q to be invalid", value)
}
}
}
func TestStreamPackageToGitea(t *testing.T) {
t.Parallel()
content := "test package content"
registry := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPut {
t.Errorf("method = %s, want PUT", r.Method)
}
if r.URL.Path != "/api/packages/TAI/generic/sentinelone-linux/26.2.0.10/agent.deb" {
t.Errorf("path = %s", r.URL.Path)
}
username, password, ok := r.BasicAuth()
if !ok || username != "publisher" || password != "write-token" {
t.Errorf("unexpected registry credentials")
}
body, err := io.ReadAll(r.Body)
if err != nil {
t.Fatal(err)
}
if string(body) != content {
t.Errorf("body = %q", body)
}
w.WriteHeader(http.StatusCreated)
}))
defer registry.Close()
registryURL, err := url.Parse(registry.URL)
if err != nil {
t.Fatal(err)
}
server := &Server{
cfg: Config{
GiteaURL: registryURL,
GiteaPackageOwner: "TAI",
GiteaWriteUser: "publisher",
GiteaWriteToken: "write-token",
},
packageClient: registry.Client(),
}
request := httptest.NewRequest(http.MethodPost, "/portal/packages/upload", nil)
checksum, size, status, err := server.streamPackageToGitea(
request,
map[string]string{
"package_name": "sentinelone-linux",
"package_version": "26.2.0.10",
},
"agent.deb",
strings.NewReader(content),
)
if err != nil {
t.Fatal(err)
}
expected := sha256.Sum256([]byte(content))
if checksum != hex.EncodeToString(expected[:]) {
t.Errorf("checksum = %s", checksum)
}
if size != int64(len(content)) {
t.Errorf("size = %d", size)
}
if status != http.StatusCreated {
t.Errorf("status = %d", status)
}
}