node_exporter/collector/os_release_test.go

150 lines
3.8 KiB
Go

// Copyright 2021 The Prometheus Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package collector
import (
"io"
"log/slog"
"os"
"reflect"
"strings"
"testing"
)
const debianBullseye string = `PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
`
const nixosTapir string = `BUG_REPORT_URL="https://github.com/NixOS/nixpkgs/issues"
BUILD_ID="23.11.20240328.219951b"
DOCUMENTATION_URL="https://nixos.org/learn.html"
HOME_URL="https://nixos.org/"
ID=nixos
LOGO="nix-snowflake"
NAME=NixOS
PRETTY_NAME="NixOS 23.11 (Tapir)"
SUPPORT_END="2024-06-30"
SUPPORT_URL="https://nixos.org/community.html"
VERSION="23.11 (Tapir)"
VERSION_CODENAME=tapir
VERSION_ID="23.11"
`
func TestParseOSRelease(t *testing.T) {
want := &osRelease{
Name: "Ubuntu",
ID: "ubuntu",
IDLike: "debian",
PrettyName: "Ubuntu 20.04.2 LTS",
SupportEnd: "",
Version: "20.04.2 LTS (Focal Fossa)",
VersionID: "20.04",
VersionCodename: "focal",
}
osReleaseFile, err := os.Open("fixtures" + usrLibOSRelease)
if err != nil {
t.Fatal(err)
}
defer osReleaseFile.Close()
got, err := parseOSRelease(osReleaseFile)
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(want, got) {
t.Fatalf("should have %+v osRelease: got %+v", want, got)
}
want = &osRelease{
Name: "Debian GNU/Linux",
ID: "debian",
PrettyName: "Debian GNU/Linux 11 (bullseye)",
Version: "11 (bullseye)",
VersionID: "11",
VersionCodename: "bullseye",
}
got, err = parseOSRelease(strings.NewReader(debianBullseye))
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(want, got) {
t.Fatalf("should have %+v osRelease: got %+v", want, got)
}
}
func TestParseOSSupportEnd(t *testing.T) {
want := &osRelease{
BuildID: "23.11.20240328.219951b",
Name: "NixOS",
ID: "nixos",
IDLike: "",
ImageID: "",
ImageVersion: "",
PrettyName: "NixOS 23.11 (Tapir)",
SupportEnd: "2024-06-30",
Variant: "",
VariantID: "",
Version: "23.11 (Tapir)",
VersionID: "23.11",
VersionCodename: "tapir",
}
got, err := parseOSRelease(strings.NewReader(nixosTapir))
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(want, got) {
t.Fatalf("should have %+v osRelease: got %+v", want, got)
}
}
func TestUpdateStruct(t *testing.T) {
wantedOS := &osRelease{
Name: "Ubuntu",
ID: "ubuntu",
IDLike: "debian",
PrettyName: "Ubuntu 20.04.2 LTS",
Version: "20.04.2 LTS (Focal Fossa)",
VersionID: "20.04",
VersionCodename: "focal",
}
wantedVersion := 20.04
collector, err := NewOSCollector(slog.New(slog.NewTextHandler(io.Discard, nil)))
if err != nil {
t.Fatal(err)
}
c := collector.(*osReleaseCollector)
err = c.UpdateStruct("fixtures" + usrLibOSRelease)
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(wantedOS, c.os) {
t.Fatalf("should have %+v osRelease: got %+v", wantedOS, c.os)
}
if wantedVersion != c.version {
t.Errorf("Expected '%v' but got '%v'", wantedVersion, c.version)
}
}