go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/connection/snapshot/blockdevices_test.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package snapshot 5 6 import ( 7 "encoding/json" 8 "os" 9 "testing" 10 11 "github.com/stretchr/testify/require" 12 ) 13 14 var RootDevice = blockDevice{Name: "sda", Children: []blockDevice{{Uuid: "1234", FsType: "xfs", Label: "ROOT", Name: "sda1", MountPoint: "/"}}} 15 16 func TestGetMatchingBlockEntryByName(t *testing.T) { 17 blockEntries := blockDevices{BlockDevices: []blockDevice{RootDevice}} 18 blockEntries.BlockDevices = append(blockEntries.BlockDevices, []blockDevice{ 19 {Name: "nvme0n1", Children: []blockDevice{{Uuid: "12345", FsType: "xfs", Label: "ROOT", Name: "nvmd1n1"}, {Uuid: "12345", FsType: "", Label: "EFI"}}}, 20 {Name: "sdx", Children: []blockDevice{{Uuid: "12346", FsType: "xfs", Label: "ROOT", Name: "sdh1"}, {Uuid: "12345", FsType: "", Label: "EFI"}}}, 21 }...) 22 23 realFsInfo, err := blockEntries.GetBlockEntryByName("/dev/sdx") 24 require.Nil(t, err) 25 require.Equal(t, fsInfo{fstype: "xfs", name: "/dev/sdh1"}, *realFsInfo) 26 27 blockEntries = blockDevices{BlockDevices: []blockDevice{RootDevice}} 28 blockEntries.BlockDevices = append(blockEntries.BlockDevices, []blockDevice{ 29 {Name: "nvme0n1", Children: []blockDevice{{Uuid: "12345", FsType: "xfs", Label: "ROOT", Name: "nvmd1n1"}, {Uuid: "12345", FsType: "", Label: "EFI"}}}, 30 {Name: "xvdx", Children: []blockDevice{{Uuid: "12346", FsType: "xfs", Label: "ROOT", Name: "xvdh1"}, {Uuid: "12345", FsType: "", Label: "EFI"}}}, 31 }...) 32 33 realFsInfo, err = blockEntries.GetBlockEntryByName("/dev/sdx") 34 require.Nil(t, err) 35 require.Equal(t, fsInfo{fstype: "xfs", name: "/dev/xvdh1"}, *realFsInfo) 36 37 blockEntries = blockDevices{BlockDevices: []blockDevice{RootDevice}} 38 blockEntries.BlockDevices = append(blockEntries.BlockDevices, []blockDevice{ 39 {Name: "nvme0n1", Children: []blockDevice{{Uuid: "12345", FsType: "xfs", Label: "ROOT", Name: "nvmd1n1"}, {Uuid: "12345", FsType: "", Label: "EFI"}}}, 40 {Name: "xvdh", Children: []blockDevice{{Uuid: "12346", FsType: "xfs", Label: "ROOT", Name: "xvdh1"}, {Uuid: "12345", FsType: "", Label: "EFI"}}}, 41 }...) 42 43 realFsInfo, err = blockEntries.GetBlockEntryByName("/dev/xvdh") 44 require.Nil(t, err) 45 require.Equal(t, fsInfo{fstype: "xfs", name: "/dev/xvdh1"}, *realFsInfo) 46 47 blockEntries = blockDevices{BlockDevices: []blockDevice{RootDevice}} 48 blockEntries.BlockDevices = append(blockEntries.BlockDevices, []blockDevice{ 49 {Name: "nvme0n1", Children: []blockDevice{{Uuid: "12345", FsType: "xfs", Label: "ROOT", Name: "nvmd1n1"}, {Uuid: "12345", FsType: "", Label: "EFI"}}}, 50 }...) 51 52 realFsInfo, err = blockEntries.GetBlockEntryByName("/dev/sdh") 53 require.Error(t, err) 54 55 blockEntries = blockDevices{BlockDevices: []blockDevice{RootDevice}} 56 realFsInfo, err = blockEntries.GetBlockEntryByName("/dev/sdh") 57 require.Error(t, err) 58 } 59 60 func TestGetNonRootBlockEntry(t *testing.T) { 61 blockEntries := blockDevices{BlockDevices: []blockDevice{RootDevice}} 62 blockEntries.BlockDevices = append(blockEntries.BlockDevices, []blockDevice{ 63 {Name: "nvme0n1", Children: []blockDevice{{Uuid: "12345", FsType: "xfs", Label: "ROOT", Name: "nvmd1n1"}, {Uuid: "12345", FsType: "", Label: "EFI"}}}, 64 }...) 65 realFsInfo, err := blockEntries.GetUnmountedBlockEntry() 66 require.Nil(t, err) 67 require.Equal(t, fsInfo{fstype: "xfs", name: "/dev/nvmd1n1"}, *realFsInfo) 68 } 69 70 func TestGetRootBlockEntry(t *testing.T) { 71 blockEntries := blockDevices{BlockDevices: []blockDevice{RootDevice}} 72 realFsInfo, err := blockEntries.GetRootBlockEntry() 73 require.Nil(t, err) 74 require.Equal(t, fsInfo{fstype: "xfs", name: "/dev/sda1"}, *realFsInfo) 75 } 76 77 func TestGetRootBlockEntryRhel8(t *testing.T) { 78 data, err := os.ReadFile("./testdata/rhel8.json") 79 require.NoError(t, err) 80 81 blockEntries := blockDevices{} 82 err = json.Unmarshal(data, &blockEntries) 83 require.NoError(t, err) 84 85 rootFsInfo, err := blockEntries.GetRootBlockEntry() 86 require.NoError(t, err) 87 require.Equal(t, fsInfo{fstype: "xfs", name: "/dev/sda2"}, *rootFsInfo) 88 89 rootFsInfo, err = blockEntries.GetUnnamedBlockEntry() 90 require.NoError(t, err) 91 require.Equal(t, fsInfo{fstype: "xfs", name: "/dev/sdc2"}, *rootFsInfo) 92 } 93 94 func TestGetRootBlockEntryRhelNoLabels(t *testing.T) { 95 data, err := os.ReadFile("./testdata/rhel8_nolabels.json") 96 require.NoError(t, err) 97 98 blockEntries := blockDevices{} 99 err = json.Unmarshal(data, &blockEntries) 100 require.NoError(t, err) 101 102 rootFsInfo, err := blockEntries.GetRootBlockEntry() 103 require.NoError(t, err) 104 require.Equal(t, fsInfo{fstype: "xfs", name: "/dev/sda2"}, *rootFsInfo) 105 106 rootFsInfo, err = blockEntries.GetUnnamedBlockEntry() 107 require.NoError(t, err) 108 require.Equal(t, fsInfo{fstype: "ext4", name: "/dev/sdb1"}, *rootFsInfo) 109 }