Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bytes"
- "errors"
- "fmt"
- "io/ioutil"
- "os"
- "strings"
- "github.com/stretchr/testify/assert"
- "testing"
- )
- type slurper func(filename string) ([]byte, error)
- // findRoot finds the device your rootfs is mounted on
- func findRoot(slurper slurper) (string, error) {
- const mountsFname = "/proc/mounts"
- buf, err := slurper(mountsFname)
- if err != nil {
- return "", err
- }
- for _, line := range bytes.Split(buf, []byte("\n")) {
- fields := strings.Fields(string(line))
- if fields[1] == "/" {
- return fields[0], nil
- }
- }
- return "", errors.New("Root partition not found in " + mountsFname)
- }
- func main() {
- root, err := findRoot(ioutil.ReadFile)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error: %v\n", err)
- os.Exit(2)
- }
- fmt.Println("Root:", root)
- }
- func mockSlurper(mockFS map[string]string) slurper {
- return func(filename string) ([]byte, error) {
- content, ok := mockFS[filename]
- if !ok {
- return nil, fmt.Errorf("%v not found", filename)
- }
- return []byte(content), nil
- }
- }
- func TestFindRoot(t *testing.T) {
- slurper := mockSlurper(map[string]string{
- "/proc/mounts": `/dev/mapper/fedora-thin--root / ext4 rw,relatime,discard 0 0
- /dev/mapper/fedora-boot /boot ext4 rw,relatime,discard 0 0
- /dev/mapper/crypthome /home ext4 rw,relatime,discard,stripe=16 0 0
- /dev/mapper/fedora-thin--root /var/lib/docker/containers ext4 rw,relatime,discard 0 0
- /dev/mapper/fedora-thin--root /var/lib/docker/devicemapper ext4 rw,relatime,discard 0 0
- `})
- root, err := findRoot(slurper)
- assert.NoError(t, err)
- assert.Equal(t, root, "/dev/mapper/fedora-thin--root")
- }
- func TestFindRootNegative(t *testing.T) {
- slurper := mockSlurper(map[string]string{
- "/jank/file": `jank content of a jank file
- `})
- content, err := findRoot(slurper)
- assert.Error(t, err)
- assert.Equal(t, content, "")
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement