Path: blob/main/packaging/agent_linux_packages_test.go
4094 views
//go:build !nonetwork && !nodocker && !race && packaging1// +build !nonetwork,!nodocker,!race,packaging23package packaging_test45import (6"fmt"7"os"8"os/exec"9"path/filepath"10"runtime"11"testing"1213"github.com/ory/dockertest/v3"14"github.com/stretchr/testify/require"15)1617// TestAgentLinuxPackages runs the entire test suite for the Linux packages.18func TestAgentLinuxPackages(t *testing.T) {19packageName := "grafana-agent"2021fmt.Println("Building packages (this may take a while...)")22buildAgentPackages(t)2324dockerPool, err := dockertest.NewPool("")25require.NoError(t, err)2627tt := []struct {28name string29f func(*AgentEnvironment, *testing.T)30}{31{"install package", (*AgentEnvironment).TestInstall},32{"ensure existing config doesn't get overridden", (*AgentEnvironment).TestConfigPersistence},33{"test data folder permissions", (*AgentEnvironment).TestDataFolderPermissions},3435// TODO: a test to verify that the systemd service works would be nice, but not36// required.37//38// An implementation of the test would have to consider what host platforms it39// works on; bind mounting /sys/fs/cgroup and using the host systemd wouldn't40// work on macOS or Windows.41}4243for _, tc := range tt {44t.Run(tc.name+"/rpm", func(t *testing.T) {45env := &AgentEnvironment{RPMEnvironment(t, packageName, dockerPool)}46tc.f(env, t)47})48t.Run(tc.name+"/deb", func(t *testing.T) {49env := &AgentEnvironment{DEBEnvironment(t, packageName, dockerPool)}50tc.f(env, t)51})52}53}5455func buildAgentPackages(t *testing.T) {56t.Helper()5758wd, err := os.Getwd()59require.NoError(t, err)60root, err := filepath.Abs(filepath.Join(wd, ".."))61require.NoError(t, err)6263cmd := exec.Command("make", fmt.Sprintf("dist-agent-packages-%s", runtime.GOARCH))64cmd.Env = append(65os.Environ(),66"VERSION=v0.0.0",67"DOCKER_OPTS=",68)69cmd.Dir = root70cmd.Stdout = os.Stdout71cmd.Stderr = os.Stderr72require.NoError(t, cmd.Run())73}7475type AgentEnvironment struct{ Environment }7677func (env *AgentEnvironment) TestInstall(t *testing.T) {78res := env.Install()79require.Equal(t, 0, res.ExitCode, "installing failed")8081res = env.ExecScript(`[ -f /usr/bin/grafana-agent ]`)82require.Equal(t, 0, res.ExitCode, "expected grafana-agent to be installed")83res = env.ExecScript(`[ -f /usr/bin/grafana-agentctl ]`)84require.Equal(t, 0, res.ExitCode, "expected grafana-agentctl to be installed")85res = env.ExecScript(`[ -f /etc/grafana-agent.yaml ]`)86require.Equal(t, 0, res.ExitCode, "expected grafana agent configuration file to exist")8788res = env.Uninstall()89require.Equal(t, 0, res.ExitCode, "uninstalling failed")9091res = env.ExecScript(`[ -f /usr/bin/grafana-agent ]`)92require.Equal(t, 1, res.ExitCode, "expected grafana-agent to be uninstalled")93res = env.ExecScript(`[ -f /usr/bin/grafana-agentctl ]`)94require.Equal(t, 1, res.ExitCode, "expected grafana-agentctl to be uninstalled")95// NOTE(rfratto): we don't check for what happens to the config file here,96// since the behavior is inconsistent: rpm uninstalls it, but deb doesn't.97}9899func (env *AgentEnvironment) TestConfigPersistence(t *testing.T) {100res := env.ExecScript(`echo -n "keepalive" > /etc/grafana-agent.yaml`)101require.Equal(t, 0, res.ExitCode, "failed to write config file")102103res = env.Install()104require.Equal(t, 0, res.ExitCode, "installation failed")105106res = env.ExecScript(`cat /etc/grafana-agent.yaml`)107require.Equal(t, "keepalive", res.Stdout, "Expected existing file to not be overridden")108}109110func (env *AgentEnvironment) TestDataFolderPermissions(t *testing.T) {111// Installing should create /var/lib/grafana-agent, assign it to the112// grafana-agent user and group, and set its permissions to 0770.113res := env.Install()114require.Equal(t, 0, res.ExitCode, "installation failed")115116res = env.ExecScript(`[ -d /var/lib/grafana-agent ]`)117require.Equal(t, 0, res.ExitCode, "Expected /var/lib/grafana-agent to have been created during install")118119res = env.ExecScript(`stat -c '%a:%U:%G' /var/lib/grafana-agent`)120require.Equal(t, "770:grafana-agent:grafana-agent\n", res.Stdout, "wrong permissions for data folder")121require.Equal(t, 0, res.ExitCode, "stat'ing data folder failed")122}123124125