96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
| package parse
 | |
| 
 | |
| import (
 | |
| 	"runtime"
 | |
| 	"testing"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| // TestDeviceParser verifies the given device strings is parsed correctly
 | |
| func TestDeviceParser(t *testing.T) {
 | |
| 	if runtime.GOOS != "linux" {
 | |
| 		t.Skip("Devices is only supported on Linux")
 | |
| 	}
 | |
| 
 | |
| 	// Test defaults
 | |
| 	src, dest, permissions, err := Device("/dev/foo")
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.Equal(t, src, "/dev/foo")
 | |
| 	assert.Equal(t, dest, "/dev/foo")
 | |
| 	assert.Equal(t, permissions, "rwm")
 | |
| 
 | |
| 	// Test defaults, different dest
 | |
| 	src, dest, permissions, err = Device("/dev/foo:/dev/bar")
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.Equal(t, src, "/dev/foo")
 | |
| 	assert.Equal(t, dest, "/dev/bar")
 | |
| 	assert.Equal(t, permissions, "rwm")
 | |
| 
 | |
| 	// Test fully specified
 | |
| 	src, dest, permissions, err = Device("/dev/foo:/dev/bar:rm")
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.Equal(t, src, "/dev/foo")
 | |
| 	assert.Equal(t, dest, "/dev/bar")
 | |
| 	assert.Equal(t, permissions, "rm")
 | |
| 
 | |
| 	// Test device, permissions
 | |
| 	src, dest, permissions, err = Device("/dev/foo:rm")
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.Equal(t, src, "/dev/foo")
 | |
| 	assert.Equal(t, dest, "/dev/foo")
 | |
| 	assert.Equal(t, permissions, "rm")
 | |
| 
 | |
| 	//test bogus permissions
 | |
| 	_, _, _, err = Device("/dev/fuse1:BOGUS")
 | |
| 	assert.Error(t, err)
 | |
| 
 | |
| 	_, _, _, err = Device("")
 | |
| 	assert.Error(t, err)
 | |
| 
 | |
| 	_, _, _, err = Device("/dev/foo:/dev/bar:rm:")
 | |
| 	assert.Error(t, err)
 | |
| 
 | |
| 	_, _, _, err = Device("/dev/foo::rm")
 | |
| 	assert.Error(t, err)
 | |
| }
 | |
| 
 | |
| func TestIsValidDeviceMode(t *testing.T) {
 | |
| 	if runtime.GOOS != "linux" {
 | |
| 		t.Skip("Devices is only supported on Linux")
 | |
| 	}
 | |
| 	assert.False(t, isValidDeviceMode("BOGUS"))
 | |
| 	assert.False(t, isValidDeviceMode("rwx"))
 | |
| 	assert.True(t, isValidDeviceMode("r"))
 | |
| 	assert.True(t, isValidDeviceMode("rw"))
 | |
| 	assert.True(t, isValidDeviceMode("rm"))
 | |
| 	assert.True(t, isValidDeviceMode("rwm"))
 | |
| }
 | |
| 
 | |
| func TestDeviceFromPath(t *testing.T) {
 | |
| 	if runtime.GOOS != "linux" {
 | |
| 		t.Skip("Devices is only supported on Linux")
 | |
| 	}
 | |
| 	// Path is valid
 | |
| 	dev, err := DeviceFromPath("/dev/null")
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.Equal(t, len(dev), 1)
 | |
| 	assert.Equal(t, dev[0].Major, int64(1))
 | |
| 	assert.Equal(t, dev[0].Minor, int64(3))
 | |
| 	assert.Equal(t, dev[0].Permissions, "rwm")
 | |
| 	assert.Equal(t, dev[0].Uid, uint32(0))
 | |
| 	assert.Equal(t, dev[0].Gid, uint32(0))
 | |
| 
 | |
| 	// Path does not exists
 | |
| 	_, err = DeviceFromPath("/dev/BOGUS")
 | |
| 	assert.Error(t, err)
 | |
| 
 | |
| 	// Path is a directory of devices
 | |
| 	_, err = DeviceFromPath("/dev/pts")
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	// path of directory has no device
 | |
| 	_, err = DeviceFromPath("/etc/passwd")
 | |
| 	assert.Error(t, err)
 | |
| }
 |