readysite / pkg / platform / providers / mock / mock_test.go
3.2 KB
mock_test.go
package mock

import (
	"errors"
	"testing"

	"github.com/readysite/readysite/pkg/platform"
)

func TestPlatform_Server(t *testing.T) {
	p := New()

	// Create server
	server, err := p.CreateServer(platform.ServerOptions{
		Name:   "test-server",
		Size:   platform.Small,
		Region: platform.NYC,
		Image:  "docker-20-04",
	})
	if err != nil {
		t.Fatalf("CreateServer failed: %v", err)
	}

	if server.ID == "" {
		t.Error("expected server ID")
	}
	if server.Name != "test-server" {
		t.Errorf("expected name 'test-server', got '%s'", server.Name)
	}
	if server.Status != "active" {
		t.Errorf("expected status 'active', got '%s'", server.Status)
	}
	if server.IP == "" {
		t.Error("expected server IP")
	}

	// Get server by name
	found, err := p.GetServer("test-server")
	if err != nil {
		t.Fatalf("GetServer failed: %v", err)
	}
	if found.ID != server.ID {
		t.Errorf("expected ID '%s', got '%s'", server.ID, found.ID)
	}

	// Get non-existent server
	_, err = p.GetServer("non-existent")
	if !errors.Is(err, platform.ErrNotFound) {
		t.Errorf("expected ErrNotFound, got %v", err)
	}

	// Delete server
	err = p.DeleteServer(server.ID)
	if err != nil {
		t.Fatalf("DeleteServer failed: %v", err)
	}

	_, err = p.GetServer("test-server")
	if !errors.Is(err, platform.ErrNotFound) {
		t.Errorf("expected ErrNotFound, got %v", err)
	}
}

func TestPlatform_Volume(t *testing.T) {
	p := New()

	// Create server for attachment
	server, _ := p.CreateServer(platform.ServerOptions{
		Name:   "test",
		Size:   platform.Micro,
		Region: platform.NYC,
	})

	// Create volume
	volume, err := p.CreateVolume("test-volume", 50, platform.NYC)
	if err != nil {
		t.Fatalf("CreateVolume failed: %v", err)
	}

	if volume.ID == "" {
		t.Error("expected volume ID")
	}
	if volume.Size != 50 {
		t.Errorf("expected size 50, got %d", volume.Size)
	}

	// Attach
	err = p.AttachVolume(volume.ID, server.ID)
	if err != nil {
		t.Fatalf("AttachVolume failed: %v", err)
	}

	// Verify attachment
	found, _ := p.GetVolume("test-volume")
	if found.ServerID != server.ID {
		t.Error("expected volume to be attached")
	}

	// Detach
	err = p.DetachVolume(volume.ID)
	if err != nil {
		t.Fatalf("DetachVolume failed: %v", err)
	}

	found, _ = p.GetVolume("test-volume")
	if found.ServerID != "" {
		t.Error("expected volume to be detached")
	}
}

func TestPlatform_DNS(t *testing.T) {
	p := New()

	// Create DNS zone
	zone, err := p.CreateDNSZone("example.com")
	if err != nil {
		t.Fatalf("CreateDNSZone failed: %v", err)
	}

	if zone.Name != "example.com" {
		t.Errorf("expected name 'example.com', got '%s'", zone.Name)
	}

	// Get zone
	found, err := p.GetDNSZone("example.com")
	if err != nil {
		t.Fatalf("GetDNSZone failed: %v", err)
	}
	if found.Name != "example.com" {
		t.Errorf("expected name 'example.com', got '%s'", found.Name)
	}

	// Add record
	err = p.AddDNSRecord("example.com", platform.DNSRecord{
		Type:  "A",
		Name:  "@",
		Value: "1.2.3.4",
		TTL:   300,
	})
	if err != nil {
		t.Fatalf("AddDNSRecord failed: %v", err)
	}

	// Add record to non-existent zone
	err = p.AddDNSRecord("nonexistent.com", platform.DNSRecord{
		Type:  "A",
		Name:  "@",
		Value: "1.2.3.4",
	})
	if !errors.Is(err, platform.ErrNotFound) {
		t.Errorf("expected ErrNotFound, got %v", err)
	}
}
← Back