#! /bin/bash

test_mklabel()
{
	ped_test "mklabel" "mklabel msdos"
}

test_too_many_primary()
{
	ped_test_expect_fail "too many primary partitions" \
		"mklabel msdos \
		 mkpart primary fat 10 20 \
		 mkpart primary fat 20 30 \
		 mkpart primary fat 30 40 \
		 mkpart primary fat 40 50 \
		 mkpart primary fat 50 60"
}

test_logical_without_extended()
{
	ped_test_expect_fail "logical partitions without extended partition"\
		"mklabel msdos \
		 mkpart logical fat 10 20"
}

test_logical_outside_extended()
{
	ped_test_expect_fail "logical partitions outside of extended partition"\
		"mklabel msdos \
		 mkpart extended 50 100\
		 mkpart logical fat 90 110"
}

test_shrink_extended_too_far()
{
	ped_test_expect_fail "excessive extended partition shrink"\
		"mklabel msdos \
		 mkpart extended 50 150\
		 mkpart logical fat 90 110\
		 resize 1 50 100"
}

test_shrink_extended()
{
	ped_test "extended partition shrink"\
		"mklabel msdos \
		 mkpart extended 50 150\
		 mkpart logical fat 90 110\
		 resize 1 80 110"
}

test_many_logical()
{
	ped_test "many logical partitions"\
		"mklabel msdos \
		 mkpart extended 100 1000 \
		 mkpart logical fat 100 200 \
		 mkpart logical fat 200 300 \
		 mkpart logical fat 300 400 \
		 mkpart logical fat 400 500 \
		 mkpart logical fat 500 600 \
		 mkpart logical fat 600 700 \
		 mkpart logical fat 700 800"
}

test_outside_boundary()
{
	ped_test_expect_fail "partition outside disk boundaries"\
		"mklabel msdos \
		 mkpart primary fat 1 $[ $TEST_DRIVE_SIZE + 1 ]"
}

test_primary_overlap()
{
	ped_test_expect_fail "primary partition overlapping"\
		"mklabel msdos \
		 mkpart primary fat 0 100\
		 mkpart primary fat 50 150"
}

test_extended_primary_overlap()
{
	ped_test_expect_fail "primary with extended partition overlapping"\
		"mklabel msdos \
		 mkpart extended 1 5\
		 mkpart primary fat 5 5"
}

test_nonexistant_remove()
{
	ped_test_expect_fail "removal of non-existant partition"\
		"mklabel msdos \
		 rm 1"
}

main()
{
	if ! test_mklabel; then
		exit 1
	fi

	test_too_many_primary
	test_logical_without_extended
	test_logical_outside_extended
	test_shrink_extended_too_far
	test_shrink_extended
	test_many_logical
	test_outside_boundary
	test_primary_overlap
	test_extended_primary_overlap
	test_nonexistant_remove
}

main

