package main

import "testing"

func TestMigration(t *testing.T) {
	m := NewMigration()
	m.Snapshot()
	if m.Source.Write(7, 11) != nil {
		t.Fatal("source unavailable too early")
	}
	if m.Cutover() == nil {
		t.Fatal("cut over unfenced source")
	}
	m.Freeze()
	if m.Cutover() == nil {
		t.Fatal("cut over stale target")
	}
	m.CatchUp()
	if m.Cutover() != nil {
		t.Fatal("ready cutover rejected")
	}
	if m.Source.Write(7, 99) == nil || m.Target.Write(7, 99) == nil {
		t.Fatal("accepted stale route")
	}
	if m.Target.Write(8, 12) != nil || m.Target.Value != 12 {
		t.Fatal("new generation failed")
	}
}
