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  }