mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-01 14:46:36 +08:00
f50eb9adee
- Introduced ReleaseChannel type to manage stable and preview releases. - Updated DashboardTopbar to handle version upgrades based on selected release channel. - Enhanced node detail page to allow manual checks for agent updates on stable and preview channels. - Modified API endpoints to support fetching and upgrading based on release channels. - Updated UI components to reflect changes in version checking and upgrade processes. - Added tests for new functionality related to preview releases and agent updates.
92 lines
2.9 KiB
Go
92 lines
2.9 KiB
Go
package updater
|
|
|
|
import (
|
|
"atsflare-agent/internal/agent"
|
|
"context"
|
|
"io"
|
|
"net/http"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
type roundTripFunc func(req *http.Request) (*http.Response, error)
|
|
|
|
func (f roundTripFunc) RoundTrip(req *http.Request) (*http.Response, error) {
|
|
return f(req)
|
|
}
|
|
|
|
func TestGetLatestPreviewRelease(t *testing.T) {
|
|
service := &Service{
|
|
httpClient: &http.Client{
|
|
Transport: roundTripFunc(func(req *http.Request) (*http.Response, error) {
|
|
if req.URL.String() != "https://api.github.com/repos/Rain-kl/ATSFlare/releases?per_page=20" {
|
|
t.Fatalf("unexpected request url: %s", req.URL.String())
|
|
}
|
|
return &http.Response{
|
|
StatusCode: http.StatusOK,
|
|
Header: make(http.Header),
|
|
Body: io.NopCloser(strings.NewReader(`[
|
|
{"tag_name":"v1.0.0","prerelease":false},
|
|
{"tag_name":"v1.1.0-rc.1","prerelease":true}
|
|
]`)),
|
|
}, nil
|
|
}),
|
|
},
|
|
}
|
|
|
|
release, err := service.getRelease(context.Background(), "Rain-kl/ATSFlare", agent.UpdateOptions{Channel: "preview"})
|
|
if err != nil {
|
|
t.Fatalf("expected preview release query to succeed: %v", err)
|
|
}
|
|
if release == nil || release.TagName != "v1.1.0-rc.1" {
|
|
t.Fatalf("unexpected preview release: %#v", release)
|
|
}
|
|
}
|
|
|
|
func TestGetReleaseByTag(t *testing.T) {
|
|
service := &Service{
|
|
httpClient: &http.Client{
|
|
Transport: roundTripFunc(func(req *http.Request) (*http.Response, error) {
|
|
if req.URL.String() != "https://api.github.com/repos/Rain-kl/ATSFlare/releases/tags/v1.1.0-rc.1" {
|
|
t.Fatalf("unexpected request url: %s", req.URL.String())
|
|
}
|
|
return &http.Response{
|
|
StatusCode: http.StatusOK,
|
|
Header: make(http.Header),
|
|
Body: io.NopCloser(strings.NewReader(`{"tag_name":"v1.1.0-rc.1","prerelease":true}`)),
|
|
}, nil
|
|
}),
|
|
},
|
|
}
|
|
|
|
release, err := service.getRelease(context.Background(), "Rain-kl/ATSFlare", agent.UpdateOptions{Channel: "preview", TagName: "v1.1.0-rc.1", Force: true})
|
|
if err != nil {
|
|
t.Fatalf("expected tag release query to succeed: %v", err)
|
|
}
|
|
if release == nil || release.TagName != "v1.1.0-rc.1" {
|
|
t.Fatalf("unexpected tag release: %#v", release)
|
|
}
|
|
}
|
|
|
|
func TestIsNewerSupportsPrerelease(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
local string
|
|
remote string
|
|
expected bool
|
|
}{
|
|
{name: "stable newer than prerelease", local: "1.2.3-rc.1", remote: "1.2.3", expected: true},
|
|
{name: "same stable not newer", local: "1.2.3", remote: "1.2.3-rc.1", expected: false},
|
|
{name: "higher prerelease sequence", local: "1.2.3-rc.1", remote: "1.2.3-rc.2", expected: true},
|
|
{name: "higher minor", local: "1.2.3", remote: "1.3.0-rc.1", expected: true},
|
|
}
|
|
|
|
for _, testCase := range testCases {
|
|
t.Run(testCase.name, func(t *testing.T) {
|
|
if actual := isNewer(testCase.local, testCase.remote); actual != testCase.expected {
|
|
t.Fatalf("unexpected compare result: local=%s remote=%s actual=%v expected=%v", testCase.local, testCase.remote, actual, testCase.expected)
|
|
}
|
|
})
|
|
}
|
|
}
|