mirror of
https://github.com/caddyserver/caddy.git
synced 2024-11-26 02:09:47 +08:00
da08c94a8c
Without -ldflags, the verison information needs to be updated manually, which is never done between releases, so development builds appear indiscernable from stable builds using `caddy -version`. This is part of a set of changes intended to relieve the burden of always updating version information manually and distributing binaries that look stable but actually may not be. A stable build is defined as one which is produced at a git tag with a clean working directory (no uncommitted changes). A dev build is anything else. With this build script, `caddy -version` will now reveal whether it is a development build and, if so, the base version, the latest commit, the date and time of build, and the names of files with changes as well as how many changes were made. The output of `caddy -version` for stable builds remains the same.
76 lines
1.9 KiB
Go
76 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"runtime"
|
|
"testing"
|
|
)
|
|
|
|
func TestSetCPU(t *testing.T) {
|
|
currentCPU := runtime.GOMAXPROCS(-1)
|
|
maxCPU := runtime.NumCPU()
|
|
halfCPU := int(0.5 * float32(maxCPU))
|
|
if halfCPU < 1 {
|
|
halfCPU = 1
|
|
}
|
|
for i, test := range []struct {
|
|
input string
|
|
output int
|
|
shouldErr bool
|
|
}{
|
|
{"1", 1, false},
|
|
{"-1", currentCPU, true},
|
|
{"0", currentCPU, true},
|
|
{"100%", maxCPU, false},
|
|
{"50%", halfCPU, false},
|
|
{"110%", currentCPU, true},
|
|
{"-10%", currentCPU, true},
|
|
{"invalid input", currentCPU, true},
|
|
{"invalid input%", currentCPU, true},
|
|
{"9999", maxCPU, false}, // over available CPU
|
|
} {
|
|
err := setCPU(test.input)
|
|
if test.shouldErr && err == nil {
|
|
t.Errorf("Test %d: Expected error, but there wasn't any", i)
|
|
}
|
|
if !test.shouldErr && err != nil {
|
|
t.Errorf("Test %d: Expected no error, but there was one: %v", i, err)
|
|
}
|
|
if actual, expected := runtime.GOMAXPROCS(-1), test.output; actual != expected {
|
|
t.Errorf("Test %d: GOMAXPROCS was %d but expected %d", i, actual, expected)
|
|
}
|
|
// teardown
|
|
runtime.GOMAXPROCS(currentCPU)
|
|
}
|
|
}
|
|
|
|
func TestSetVersion(t *testing.T) {
|
|
setVersion()
|
|
if !devBuild {
|
|
t.Error("Expected default to assume development build, but it didn't")
|
|
}
|
|
if got, want := appVersion, "(untracked dev build)"; got != want {
|
|
t.Errorf("Expected appVersion='%s', got: '%s'", want, got)
|
|
}
|
|
|
|
gitTag = "v1.1"
|
|
setVersion()
|
|
if devBuild {
|
|
t.Error("Expected a stable build if gitTag is set with no changes")
|
|
}
|
|
if got, want := appVersion, "1.1"; got != want {
|
|
t.Errorf("Expected appVersion='%s', got: '%s'", want, got)
|
|
}
|
|
|
|
gitTag = ""
|
|
gitNearestTag = "v1.0"
|
|
gitCommit = "deadbeef"
|
|
buildDate = "Fri Feb 26 06:53:17 UTC 2016"
|
|
setVersion()
|
|
if !devBuild {
|
|
t.Error("Expected inferring a dev build when gitTag is empty")
|
|
}
|
|
if got, want := appVersion, "1.0 (+deadbeef Fri Feb 26 06:53:17 UTC 2016)"; got != want {
|
|
t.Errorf("Expected appVersion='%s', got: '%s'", want, got)
|
|
}
|
|
}
|