#! /bin/bash

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

test_mkpart()
{
	ped_test "mkpart" "mklabel msdos mkpart primary ext2 10 20"
}

test_create_extended_at_start()
{
	ped_test "creating an extended partition at the start of the disk"\
		"mklabel msdos \
		 mkpart extended 0 500"
}


test_mkpartfs()
{
	ped_test "mkpartfs" "mklabel msdos mkpartfs primary ext2 10 20"
}

test_rm()
{
	ped_test "rm" "mklabel msdos mkpart primary ext2 10 20 rm 1"
}

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

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

# Parted's constraint solver "corrects" this.  Hmmm... is this wise?
#test_logical_outside_extended()
#{
#	ped_test_expect_fail "logical partitions outside of extended partition"\
#		"mklabel msdos \
#		 mkpart extended 50 100\
#		 mkpart logical ext2 90 150"
#}

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

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

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

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

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

test_extended_primary_overlap()
{
	ped_test_expect_fail "primary with extended partition overlapping"\
		"mklabel msdos \
		 mkpart extended 1 100\
		 mkpart primary ext2 50 150"
}

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

test_create_small()
{
	ped_test "create small partition"\
		"mklabel msdos \
		 mkpartfs primary ext2 1 2"
}

test_move_primary()
{
	ped_test "move primary partition"\
		"mklabel msdos \
		 mkpartfs primary fat 0 100 \
		 mkpartfs primary fat 100 200 \
		 move 1 200 300"\
		"No"
}

test_move_logical()
{
	ped_test "move logical partition"\
		"mklabel msdos \
		 mkpart extended 0 500
		 mkpartfs logical fat 0 100 \
		 mkpartfs logical fat 100 200 \
		 move 5 200 300"\
		"No"
}

test_create_end()
{
       ped_test "create partition at end-of-disk"\
	       "mklabel msdos \
		mkpartfs primary ext2 \
		$[TEST_DRIVE_SIZE - 10] $[TEST_DRIVE_SIZE]"
}

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

	test_mkpart
	test_create_extended_at_start
	test_mkpartfs
	test_rm
	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
	test_create_small
	test_move_primary
	test_move_logical
	test_create_end
}

main

