Files
sliverarmory-reflektor/integration/sharedlib_load_recursive_modes_test.go

76 lines
2.3 KiB
Go

//go:build (darwin || linux || windows) && (386 || amd64 || arm64)
package reflektor_test
import (
"bytes"
"errors"
"os"
"path/filepath"
"runtime"
"testing"
"github.com/sliverarmory/reflektor"
)
func TestLoadGeneratedCSharedLibraryRecursiveMode(t *testing.T) {
requireCommand(t, "zig")
requireRecursiveLoaderPlatform(t)
outDir := t.TempDir()
libraryPath := buildOneSharedLib(t, outDir, runtime.GOOS, runtime.GOARCH)
markerPath := filepath.Join(t.TempDir(), "reflektor_recursive_c_marker.txt")
t.Setenv("REFLEKTOR_MARKER", markerPath)
if runtime.GOOS == "windows" {
_ = os.Remove(windowsRecursiveFallbackMarker)
t.Cleanup(func() { _ = os.Remove(windowsRecursiveFallbackMarker) })
}
library, err := reflektor.LoadLibraryFileRecursive(libraryPath)
if err != nil {
t.Fatalf("LoadLibraryFileRecursive(%s): %v", libraryPath, err)
}
t.Cleanup(func() { _ = library.Close() })
if err := library.CallExport("StartW"); err != nil {
t.Fatalf("CallExport(StartW): %v", err)
}
got, err := os.ReadFile(markerPath)
if runtime.GOOS == "windows" && errors.Is(err, os.ErrNotExist) {
got, err = os.ReadFile(windowsRecursiveFallbackMarker)
}
if err != nil {
t.Fatalf("read recursive C marker: %v", err)
}
if !bytes.Equal(got, []byte("ok")) {
t.Fatalf("unexpected recursive C marker: got=%q want=%q", got, []byte("ok"))
}
}
func TestLoadGeneratedGoSharedLibraryRecursiveMode(t *testing.T) {
requireRecursiveLoaderPlatform(t)
outDir := t.TempDir()
libraryPath := buildOneGoSharedLib(t, outDir, runtime.GOOS, runtime.GOARCH)
runGoRuntimeFixtureSubprocessMode(t, libraryPath, true)
}
func TestLoadGeneratedRustSharedLibraryRecursiveMode(t *testing.T) {
requireRecursiveLoaderPlatform(t)
outDir := newRustBuildDir(t)
libraryPath := buildOneRustSharedLib(t, outDir, runtime.GOOS, runtime.GOARCH)
markerPath := filepath.Join(t.TempDir(), "reflektor_recursive_rust_marker.txt")
t.Setenv("REFLEKTOR_MARKER", markerPath)
library, err := reflektor.LoadLibraryFileRecursive(libraryPath)
if err != nil {
t.Fatalf("LoadLibraryFileRecursive(%s): %v", libraryPath, err)
}
t.Cleanup(func() { _ = library.Close() })
if err := library.CallExport("StartW"); err != nil {
t.Fatalf("CallExport(StartW): %v", err)
}
assertRustHTTPMarker(t, markerPath)
}
const windowsRecursiveFallbackMarker = `C:\Windows\Temp\reflektor_marker.txt`