Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixed issue 50 #74

Merged
merged 4 commits into from
Oct 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/compile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ jobs:
fail-fast: false
matrix:
os:
- macOS-11
- macOS-12
go:
- 1.17
Expand Down
12 changes: 0 additions & 12 deletions error_test.go

This file was deleted.

63 changes: 63 additions & 0 deletions issues_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package vz

import (
"os"
"testing"
)

func TestIssue50(t *testing.T) {
f, err := os.CreateTemp("", "vmlinuz")
if err != nil {
t.Fatal(err)
}
defer f.Close()

bootloader, err := NewLinuxBootLoader(f.Name())
if err != nil {
t.Fatal(err)
}
config, err := NewVirtualMachineConfiguration(bootloader, 1, 1024*1024*1024)
if err != nil {
t.Fatal(err)
}
ok, err := config.Validate()
if err != nil {
t.Fatal(err)
}
if !ok {
t.Fatal("failed to validate config")
}
m, err := NewVirtualMachine(config)
if err != nil {
t.Fatal(err)
}

t.Run("check for segmentation faults", func(t *testing.T) {
cases := map[string]func(){
"start handler": func() {
m.Start(func(err error) { _ = err == nil })
},
"pause handler": func() {
m.Pause(func(err error) { _ = err == nil })
},
"resume handler": func() {
m.Resume(func(err error) { _ = err == nil })
},
"stop handler": func() {
m.Stop(func(err error) { _ = err == nil })
},
}
for name, run := range cases {
t.Run(name, func(t *testing.T) {
run()
})
}
})
}

func TestIssue71(t *testing.T) {
_, err := NewFileSerialPortAttachment("/non/existing/path", false)
if err == nil {
t.Error("NewFileSerialPortAttachment should have returned an error")
}
}
1 change: 0 additions & 1 deletion virtualization.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

#pragma once

#import "virtualization_raise.h"
#import <Foundation/Foundation.h>
#import <Virtualization/Virtualization.h>

Expand Down
34 changes: 22 additions & 12 deletions virtualization.m
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
//

#import "virtualization.h"
#import "virtualization_helper.h"
#import "virtualization_view.h"

char *copyCString(NSString *nss)
Expand Down Expand Up @@ -1059,14 +1060,23 @@ bool requestStopVirtualMachine(void *machine, void *queue, void **error)
return queue;
}

typedef void (^vm_completion_handler_t)(NSError *);

vm_completion_handler_t makeVMCompletionHandler(void *completionHandler)
{
return Block_copy(^(NSError *err) {
virtualMachineCompletionHandler(completionHandler, err);
});
}

void startWithCompletionHandler(void *machine, void *queue, void *completionHandler)
{
if (@available(macOS 11, *)) {
vm_completion_handler_t handler = makeVMCompletionHandler(completionHandler);
dispatch_sync((dispatch_queue_t)queue, ^{
[(VZVirtualMachine *)machine startWithCompletionHandler:^(NSError *err) {
virtualMachineCompletionHandler(completionHandler, err);
}];
[(VZVirtualMachine *)machine startWithCompletionHandler:handler];
});
Block_release(handler);
return;
}

Expand All @@ -1076,11 +1086,11 @@ void startWithCompletionHandler(void *machine, void *queue, void *completionHand
void pauseWithCompletionHandler(void *machine, void *queue, void *completionHandler)
{
if (@available(macOS 11, *)) {
vm_completion_handler_t handler = makeVMCompletionHandler(completionHandler);
dispatch_sync((dispatch_queue_t)queue, ^{
[(VZVirtualMachine *)machine pauseWithCompletionHandler:^(NSError *err) {
virtualMachineCompletionHandler(completionHandler, err);
}];
[(VZVirtualMachine *)machine pauseWithCompletionHandler:handler];
});
Block_release(handler);
return;
}

Expand All @@ -1090,11 +1100,11 @@ void pauseWithCompletionHandler(void *machine, void *queue, void *completionHand
void resumeWithCompletionHandler(void *machine, void *queue, void *completionHandler)
{
if (@available(macOS 11, *)) {
vm_completion_handler_t handler = makeVMCompletionHandler(completionHandler);
dispatch_sync((dispatch_queue_t)queue, ^{
[(VZVirtualMachine *)machine resumeWithCompletionHandler:^(NSError *err) {
virtualMachineCompletionHandler(completionHandler, err);
}];
[(VZVirtualMachine *)machine resumeWithCompletionHandler:handler];
});
Block_release(handler);
return;
}

Expand All @@ -1104,11 +1114,11 @@ void resumeWithCompletionHandler(void *machine, void *queue, void *completionHan
void stopWithCompletionHandler(void *machine, void *queue, void *completionHandler)
{
if (@available(macOS 12, *)) {
vm_completion_handler_t handler = makeVMCompletionHandler(completionHandler);
dispatch_sync((dispatch_queue_t)queue, ^{
[(VZVirtualMachine *)machine stopWithCompletionHandler:^(NSError *err) {
virtualMachineCompletionHandler(completionHandler, err);
}];
[(VZVirtualMachine *)machine stopWithCompletionHandler:handler];
});
Block_release(handler);
return;
}

Expand Down
2 changes: 1 addition & 1 deletion virtualization_arm64.m
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#ifdef __arm64__
#import "virtualization_arm64.h"
#import "virtualization_raise.h"
#import "virtualization_helper.h"

@implementation ProgressObserver
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
Expand Down
2 changes: 1 addition & 1 deletion virtualization_debug.m
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
//

#import "virtualization_debug.h"
#import "virtualization_raise.h"
#import "virtualization_helper.h"

/*!
@abstract Create a VZGDBDebugStubConfiguration with debug port for GDB server.
Expand Down
File renamed without changes.