+# test get_splitting_args_from_config thoroughly
+my $maxint64 = Math::BigInt->new("9223372036854775808");
+
+is_deeply(
+ { get_splitting_args_from_config(
+ ) },
+ { allow_split => 0 },
+ "default is only allow_split set to 0");
+
+is_deeply(
+ { get_splitting_args_from_config(
+ dle_tape_splitsize => 0,
+ dle_split_diskbuffer => $Installcheck::TMP,
+ dle_fallback_splitsize => 100,
+ ) },
+ { allow_split => 0, part_size => 0, part_cache_type => 'none' },
+ "tape_splitsize = 0 indicates no splitting");
+
+is_deeply(
+ { get_splitting_args_from_config(
+ dle_allow_split => 0,
+ part_size => 100,
+ part_cache_dir => "/tmp",
+ ) },
+ { allow_split => 0 },
+ "default if dle_allow_split is false, no splitting");
+
+is_deeply(
+ { get_splitting_args_from_config(
+ dle_tape_splitsize => 200,
+ dle_fallback_splitsize => 150,
+ ) },
+ { allow_split => 1,part_cache_type => 'memory', part_size => 200, part_cache_max_size => 150 },
+ "when cache_inform is available, tape_splitsize is used, not fallback");
+
+is_deeply(
+ { get_splitting_args_from_config(
+ dle_tape_splitsize => 200,
+ ) },
+ { allow_split => 1, part_size => 200, part_cache_type => 'memory', part_cache_max_size => 1024*1024*10, },
+ "no split_diskbuffer and no fallback_splitsize, fall back to default (10M)");
+
+is_deeply(
+ { get_splitting_args_from_config(
+ dle_tape_splitsize => 200,
+ dle_split_diskbuffer => "$Installcheck::TMP/does!not!exist!",
+ dle_fallback_splitsize => 150,
+ ) },
+ { allow_split => 1, part_size => 200, part_cache_type => 'memory', part_cache_max_size => 150 },
+ "invalid split_diskbuffer => fall back (silently)");
+
+is_deeply(
+ { get_splitting_args_from_config(
+ dle_tape_splitsize => 200,
+ dle_split_diskbuffer => "$Installcheck::TMP/does!not!exist!",
+ ) },
+ { allow_split => 1, part_size => 200, part_cache_type => 'memory', part_cache_max_size => 1024*1024*10 },
+ ".. even to the default fallback (10M)");
+
+is_deeply(
+ { get_splitting_args_from_config(
+ dle_tape_splitsize => $maxint64,
+ dle_split_diskbuffer => "$Installcheck::TMP",
+ dle_fallback_splitsize => 250,
+ ) },
+ { allow_split => 1, part_size => $maxint64, part_cache_type => 'memory', part_cache_max_size => 250,
+ warning => "falling back to memory buffer for splitting: " .
+ "insufficient space in disk cache directory" },
+ "not enough space in split_diskbuffer => fall back (with warning)");
+
+is_deeply(
+ { get_splitting_args_from_config(
+ can_cache_inform => 0,
+ dle_tape_splitsize => 200,
+ dle_split_diskbuffer => "$Installcheck::TMP",
+ dle_fallback_splitsize => 150,
+ ) },
+ { allow_split => 1, part_size => 200, part_cache_type => 'disk', part_cache_dir => "$Installcheck::TMP" },
+ "if split_diskbuffer exists and splitsize is nonzero, use it");
+
+is_deeply(
+ { get_splitting_args_from_config(
+ dle_tape_splitsize => 0,
+ dle_split_diskbuffer => "$Installcheck::TMP",
+ dle_fallback_splitsize => 250,
+ ) },
+ { allow_split => 0, part_size => 0, part_cache_type => 'none' },
+ ".. but if splitsize is zero, no splitting");
+
+is_deeply(
+ { get_splitting_args_from_config(
+ dle_split_diskbuffer => "$Installcheck::TMP",
+ dle_fallback_splitsize => 250,
+ ) },
+ { allow_split => 0, part_size => 0, part_cache_type => 'none' },
+ ".. and if splitsize is missing, no splitting");
+
+is_deeply(
+ { get_splitting_args_from_config(
+ part_size => 300,
+ part_cache_type => 'none',
+ ) },
+ { allow_split => 1, part_size => 300, part_cache_type => 'none' },
+ "part_* parameters handled correctly when missing");
+
+is_deeply(
+ { get_splitting_args_from_config(
+ part_size => 300,
+ part_cache_type => 'disk',
+ part_cache_dir => $Installcheck::TMP,
+ part_cache_max_size => 250,
+ ) },
+ { allow_split => 1, part_size => 300, part_cache_type => 'disk',
+ part_cache_dir => $Installcheck::TMP, part_cache_max_size => 250, },
+ "part_* parameters handled correctly when specified");
+
+is_deeply(
+ { get_splitting_args_from_config(
+ part_size => 300,
+ part_cache_type => 'disk',
+ part_cache_dir => "$Installcheck::TMP/does!not!exist!",
+ part_cache_max_size => 250,
+ ) },
+ { allow_split => 1, part_size => 300, part_cache_type => 'none',
+ part_cache_max_size => 250,
+ warning => "part-cache-dir '$Installcheck::TMP/does!not!exist! does not exist; "
+ . "using part cache type 'none'"},
+ "part_* parameters handled correctly when specified");
+
+$chg->quit();