Maint: tun package to handle tun device operations
- Moved from openvpn package to tun package - TUN check verifies Rdev value - TUN create - Inject as interface to main function - Add integration test - Clearer log message for end users if tun device does not exist - Remove unix package (unneeded for tests) - Remove tun file opening at the end of tun file creation - Do not mock unix.Mkdev (no OS operation) - Remove Tun operations from OpenVPN configurator
This commit is contained in:
68
internal/tun/tun_test.go
Normal file
68
internal/tun/tun_test.go
Normal file
@@ -0,0 +1,68 @@
|
||||
package tun
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func Test_Tun(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
path := getTempPath(t)
|
||||
|
||||
tun := New()
|
||||
|
||||
defer func() {
|
||||
err := os.RemoveAll(path)
|
||||
require.NoError(t, err)
|
||||
}()
|
||||
|
||||
// No file check fail
|
||||
err := tun.Check(path)
|
||||
require.Error(t, err)
|
||||
expectedMessage := "TUN device is not available: open " + path + ": no such file or directory"
|
||||
require.Equal(t, expectedMessage, err.Error())
|
||||
|
||||
// Create simple file
|
||||
file, err := os.Create(path)
|
||||
require.NoError(t, err)
|
||||
err = file.Close()
|
||||
require.NoError(t, err)
|
||||
|
||||
// Simple file check fail
|
||||
err = tun.Check(path)
|
||||
require.Error(t, err)
|
||||
expectedMessage = "TUN file has an unexpected rdev: 0 instead of expected 2760"
|
||||
require.Equal(t, expectedMessage, err.Error())
|
||||
|
||||
// Create TUN device fail as file exists
|
||||
err = tun.Create(path)
|
||||
require.Error(t, err)
|
||||
require.Equal(t, "cannot create TUN device file node: file exists", err.Error())
|
||||
|
||||
// Remove simple file
|
||||
err = os.Remove(path)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Create TUN device success
|
||||
err = tun.Create(path)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Check TUN device success
|
||||
err = tun.Check(path)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func getTempPath(t *testing.T) (path string) {
|
||||
t.Helper()
|
||||
file, err := os.CreateTemp("", "")
|
||||
require.NoError(t, err)
|
||||
path = file.Name()
|
||||
err = file.Close()
|
||||
require.NoError(t, err)
|
||||
err = os.Remove(path)
|
||||
require.NoError(t, err)
|
||||
return path
|
||||
}
|
||||
Reference in New Issue
Block a user