Add devmapper_test.go
This commit is contained in:
parent
1d188c8737
commit
4bebca848e
3 changed files with 232 additions and 7 deletions
|
@ -46,8 +46,11 @@ var (
|
||||||
ErrTaskSetAddNode = errors.New("dm_task_set_add_node failed")
|
ErrTaskSetAddNode = errors.New("dm_task_set_add_node failed")
|
||||||
ErrTaskSetRO = errors.New("dm_task_set_ro failed")
|
ErrTaskSetRO = errors.New("dm_task_set_ro failed")
|
||||||
ErrTaskAddTarget = errors.New("dm_task_add_target failed")
|
ErrTaskAddTarget = errors.New("dm_task_add_target failed")
|
||||||
|
ErrTaskSetSector = errors.New("dm_task_set_sector failed")
|
||||||
ErrGetInfo = errors.New("dm_task_get_info failed")
|
ErrGetInfo = errors.New("dm_task_get_info failed")
|
||||||
ErrGetDriverVersion = errors.New("dm_task_get_driver_version failed")
|
ErrGetDriverVersion = errors.New("dm_task_get_driver_version failed")
|
||||||
|
ErrTaskSetCookie = errors.New("dm_task_set_cookie failed")
|
||||||
|
ErrNilCookie = errors.New("cookie ptr can't be nil")
|
||||||
ErrAttachLoopbackDevice = errors.New("loopback mounting failed")
|
ErrAttachLoopbackDevice = errors.New("loopback mounting failed")
|
||||||
ErrGetBlockSize = errors.New("Can't get block size")
|
ErrGetBlockSize = errors.New("Can't get block size")
|
||||||
ErrUdevWait = errors.New("wait on udev cookie failed")
|
ErrUdevWait = errors.New("wait on udev cookie failed")
|
||||||
|
@ -117,14 +120,17 @@ func (t *Task) SetMessage(message string) error {
|
||||||
|
|
||||||
func (t *Task) SetSector(sector uint64) error {
|
func (t *Task) SetSector(sector uint64) error {
|
||||||
if res := DmTaskSetSector(t.unmanaged, sector); res != 1 {
|
if res := DmTaskSetSector(t.unmanaged, sector); res != 1 {
|
||||||
return ErrTaskSetAddNode
|
return ErrTaskSetSector
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Task) SetCookie(cookie *uint, flags uint16) error {
|
func (t *Task) SetCookie(cookie *uint, flags uint16) error {
|
||||||
|
if cookie == nil {
|
||||||
|
return ErrNilCookie
|
||||||
|
}
|
||||||
if res := DmTaskSetCookie(t.unmanaged, cookie, flags); res != 1 {
|
if res := DmTaskSetCookie(t.unmanaged, cookie, flags); res != 1 {
|
||||||
return ErrTaskSetAddNode
|
return ErrTaskSetCookie
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
221
devmapper/devmapper_test.go
Normal file
221
devmapper/devmapper_test.go
Normal file
|
@ -0,0 +1,221 @@
|
||||||
|
package devmapper
|
||||||
|
|
||||||
|
import (
|
||||||
|
"syscall"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestTaskCreate(t *testing.T) {
|
||||||
|
// Test success
|
||||||
|
taskCreate(t, DeviceInfo)
|
||||||
|
|
||||||
|
// Test Failure
|
||||||
|
DmTaskCreate = dmTaskCreateFail
|
||||||
|
defer func() { DmTaskCreate = dmTaskCreateFct }()
|
||||||
|
if task := TaskCreate(-1); task != nil {
|
||||||
|
t.Fatalf("An error should have occured while creating an invalid task.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTaskRun(t *testing.T) {
|
||||||
|
task := taskCreate(t, DeviceInfo)
|
||||||
|
|
||||||
|
// Test success
|
||||||
|
// Perform the RUN
|
||||||
|
if err := task.Run(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
// Make sure we don't have error with GetInfo
|
||||||
|
if _, err := task.GetInfo(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test failure
|
||||||
|
DmTaskRun = dmTaskRunFail
|
||||||
|
defer func() { DmTaskRun = dmTaskRunFct }()
|
||||||
|
|
||||||
|
task = taskCreate(t, DeviceInfo)
|
||||||
|
// Perform the RUN
|
||||||
|
if err := task.Run(); err == nil {
|
||||||
|
t.Fatalf("An error should have occured while running task.")
|
||||||
|
}
|
||||||
|
// Make sure GetInfo also fails
|
||||||
|
if _, err := task.GetInfo(); err == nil {
|
||||||
|
t.Fatalf("GetInfo should fail if task.Run() failed.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTaskSetName(t *testing.T) {
|
||||||
|
task := taskCreate(t, DeviceInfo)
|
||||||
|
|
||||||
|
// Test success
|
||||||
|
if err := task.SetName("test"); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test failure
|
||||||
|
DmTaskSetName = dmTaskSetNameFail
|
||||||
|
defer func() { DmTaskSetName = dmTaskSetNameFct }()
|
||||||
|
if err := task.SetName("test"); err != ErrTaskSetName {
|
||||||
|
t.Fatalf("An error should have occured while runnign SetName.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTaskSetMessage(t *testing.T) {
|
||||||
|
task := taskCreate(t, DeviceInfo)
|
||||||
|
|
||||||
|
// Test success
|
||||||
|
if err := task.SetMessage("test"); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test failure
|
||||||
|
DmTaskSetMessage = dmTaskSetMessageFail
|
||||||
|
defer func() { DmTaskSetMessage = dmTaskSetMessageFct }()
|
||||||
|
if err := task.SetMessage("test"); err != ErrTaskSetMessage {
|
||||||
|
t.Fatalf("An error should have occured while runnign SetMessage.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTaskSetSector(t *testing.T) {
|
||||||
|
task := taskCreate(t, DeviceInfo)
|
||||||
|
|
||||||
|
// Test success
|
||||||
|
if err := task.SetSector(128); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
DmTaskSetSector = dmTaskSetSectorFail
|
||||||
|
defer func() { DmTaskSetSector = dmTaskSetSectorFct }()
|
||||||
|
|
||||||
|
// Test failure
|
||||||
|
if err := task.SetSector(0); err != ErrTaskSetSector {
|
||||||
|
t.Fatalf("An error should have occured while running SetSector.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTaskSetCookie(t *testing.T) {
|
||||||
|
var (
|
||||||
|
cookie uint = 0
|
||||||
|
task = taskCreate(t, DeviceInfo)
|
||||||
|
)
|
||||||
|
|
||||||
|
// Test success
|
||||||
|
if err := task.SetCookie(&cookie, 0); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test failure
|
||||||
|
if err := task.SetCookie(nil, 0); err != ErrNilCookie {
|
||||||
|
t.Fatalf("An error should have occured while running SetCookie with nil cookie.")
|
||||||
|
}
|
||||||
|
|
||||||
|
DmTaskSetCookie = dmTaskSetCookieFail
|
||||||
|
defer func() { DmTaskSetCookie = dmTaskSetCookieFct }()
|
||||||
|
|
||||||
|
if err := task.SetCookie(&cookie, 0); err != ErrTaskSetCookie {
|
||||||
|
t.Fatalf("An error should have occured while running SetCookie.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTaskSetAddNode(t *testing.T) {
|
||||||
|
task := taskCreate(t, DeviceInfo)
|
||||||
|
if err := task.SetAddNode(0); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTaskSetRo(t *testing.T) {
|
||||||
|
task := taskCreate(t, DeviceInfo)
|
||||||
|
if err := task.SetRo(); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTaskAddTarget(t *testing.T) {
|
||||||
|
// task := taskCreate(t, DeviceInfo)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Utils
|
||||||
|
func taskCreate(t *testing.T, taskType TaskType) *Task {
|
||||||
|
task := TaskCreate(taskType)
|
||||||
|
if task == nil {
|
||||||
|
t.Fatalf("Error creating task")
|
||||||
|
}
|
||||||
|
return task
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Failure function replacement
|
||||||
|
func dmTaskCreateFail(t int) *CDmTask {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmTaskRunFail(task *CDmTask) int {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmTaskSetNameFail(task *CDmTask, name string) int {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmTaskSetMessageFail(task *CDmTask, message string) int {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmTaskSetSectorFail(task *CDmTask, sector uint64) int {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmTaskSetCookieFail(task *CDmTask, cookie *uint, flags uint16) int {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmTaskSetAddNodeFail(task *CDmTask, addNode AddNodeType) int {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmTaskSetRoFail(task *CDmTask) int {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmTaskAddTargetFail(task *CDmTask,
|
||||||
|
start, size uint64, ttype, params string) int {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmTaskGetDriverVersionFail(task *CDmTask, version *string) int {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmTaskGetInfoFail(task *CDmTask, info *Info) int {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmGetNextTargetFail(task *CDmTask, next uintptr, start, length *uint64,
|
||||||
|
target, params *string) uintptr {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmAttachLoopDeviceFail(filename string, fd *int) string {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func sysGetBlockSizeFail(fd uintptr, size *uint64) syscall.Errno {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmGetBlockSizeFail(fd uintptr) int64 {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmUdevWaitFail(cookie uint) int {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmSetDevDirFail(dir string) int {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
func dmGetLibraryVersionFail(version *string) int {
|
||||||
|
return -1
|
||||||
|
}
|
|
@ -127,9 +127,8 @@ static int64_t get_block_size(int fd)
|
||||||
|
|
||||||
extern void DevmapperLogCallback(int level, char *file, int line, int dm_errno_or_class, char *str);
|
extern void DevmapperLogCallback(int level, char *file, int line, int dm_errno_or_class, char *str);
|
||||||
|
|
||||||
static void
|
static void log_cb(int level, const char *file, int line,
|
||||||
log_cb(int level, const char *file, int line,
|
int dm_errno_or_class, const char *f, ...)
|
||||||
int dm_errno_or_class, const char *f, ...)
|
|
||||||
{
|
{
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
@ -141,8 +140,7 @@ log_cb(int level, const char *file, int line,
|
||||||
DevmapperLogCallback(level, (char *)file, line, dm_errno_or_class, buffer);
|
DevmapperLogCallback(level, (char *)file, line, dm_errno_or_class, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void log_with_errno_init()
|
||||||
log_with_errno_init ()
|
|
||||||
{
|
{
|
||||||
dm_log_with_errno_init(log_cb);
|
dm_log_with_errno_init(log_cb);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue