github.com/openebs/node-disk-manager@v1.9.1-0.20230225014141-4531f06ffa1e/pkg/udev/monitor_test.go (about)

     1  /*
     2  Copyright 2018 OpenEBS Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package udev
    18  
    19  import (
    20  	"errors"
    21  	"testing"
    22  
    23  	"github.com/stretchr/testify/assert"
    24  )
    25  
    26  func TestNewDeviceFromNetlink(t *testing.T) {
    27  	udev, err := NewUdev()
    28  	if err != nil {
    29  		t.Error(err)
    30  	}
    31  	defer udev.UnrefUdev()
    32  	// For valid monitor source NewUdeviceMon() should return monitor device pointer and nil error.
    33  	udevMonitor, err := udev.NewDeviceFromNetlink("udev")
    34  	if err != nil {
    35  		t.Fatal(err)
    36  	}
    37  	defer udevMonitor.UdevMonitorUnref()
    38  	// For invalid monitor source NewUdeviceMon() should return nil monitor device pointer and error.
    39  	_, err = udev.NewDeviceFromNetlink("block")
    40  	if err != nil {
    41  		assert.Equal(t, errors.New("unable to create Udevenumerate object for for null struct struct_udev_monitor"), err)
    42  	}
    43  }
    44  
    45  func TestAddFilterSubsystem(t *testing.T) {
    46  	// for successful AddFilterSubsystem() it should return nil error.
    47  	udev, err := NewUdev()
    48  	if err != nil {
    49  		t.Error(err)
    50  	}
    51  	defer udev.UnrefUdev()
    52  	udevMonitor, err := udev.NewDeviceFromNetlink("udev")
    53  	if err != nil {
    54  		t.Fatal(err)
    55  	}
    56  	defer udevMonitor.UdevMonitorUnref()
    57  	assert.Equal(t, nil, udevMonitor.AddSubsystemFilter("block"))
    58  }
    59  
    60  func TestEnableMonitorReceiving(t *testing.T) {
    61  	// for successful EnableMonitorReceiving() it should return nil error.
    62  	// if we free udevMonitor pointer then it should return an error.
    63  	udev, err := NewUdev()
    64  	if err != nil {
    65  		t.Error(err)
    66  	}
    67  	defer udev.UnrefUdev()
    68  	udevMonitor, err := udev.NewDeviceFromNetlink("udev")
    69  	if err != nil {
    70  		t.Fatal(err)
    71  	}
    72  	defer udevMonitor.UdevMonitorUnref()
    73  	err = udevMonitor.EnableReceiving()
    74  	if err != nil {
    75  		t.Error("expected nil error")
    76  	}
    77  	udevMonitor1, err := udev.NewDeviceFromNetlink("udev")
    78  	if err != nil {
    79  		t.Fatal(err)
    80  	}
    81  	udevMonitor1.UdevMonitorUnref()
    82  	err = udevMonitor1.EnableReceiving()
    83  	assert.Equal(t, errors.New("unable to enable receiving udev"), err)
    84  
    85  }
    86  
    87  func TestGetFd(t *testing.T) {
    88  	// for successful TestGetFd() it should return nil error
    89  	// and fd value should be greater than 0.
    90  	udev, err := NewUdev()
    91  	if err != nil {
    92  		t.Error(err)
    93  	}
    94  	defer udev.UnrefUdev()
    95  	udevMonitor, err := udev.NewDeviceFromNetlink("udev")
    96  	if err != nil {
    97  		t.Fatal(err)
    98  	}
    99  	defer udevMonitor.UdevMonitorUnref()
   100  	fd, err := udevMonitor.GetFd()
   101  	if fd <= 0 {
   102  		t.Error("fd value should be greater than 0")
   103  	}
   104  	assert.Equal(t, nil, err)
   105  }
   106  
   107  func TestUdevMonitorNewDevice(t *testing.T) {
   108  	udev, err := NewUdev()
   109  	if err != nil {
   110  		t.Error(err)
   111  	}
   112  	defer udev.UnrefUdev()
   113  	udevMonitor, err := udev.NewDeviceFromNetlink("udev")
   114  	if err != nil {
   115  		t.Fatal(err)
   116  	}
   117  	defer udevMonitor.UdevMonitorUnref()
   118  	_, err = udevMonitor.ReceiveDevice()
   119  	if err != nil {
   120  		assert.Equal(t, errors.New("unable to create Udevice object for null struct struct_udev_device"), err)
   121  	}
   122  }