module Test_multipath =

  let conf = "# Blacklist all devices by default.
blacklist {
        devnode \"*\"
        wwid    *
}

# By default, devices with vendor = \"IBM\" and product = \"S/390.*\" are
# blacklisted. To enable mulitpathing on these devies, uncomment the
# following lines.
blacklist_exceptions {
	device {
		vendor	\"IBM\"
		product	\"S/390.*\"
	}
}

#
# Here is an example of how to configure some standard options.
#

defaults {
	udev_dir		/dev
	polling_interval 	10
	selector		\"round-robin 0\"
	path_grouping_policy	multibus
	getuid_callout		\"/sbin/scsi_id --whitelisted /dev/%n\"
	prio			alua
	path_checker		readsector0
	rr_min_io		100
	max_fds			8192
	rr_weight		priorities
	failback		immediate
	no_path_retry		fail
	user_friendly_names	yes
  dev_loss_tmo  30
  max_polling_interval  300
  verbosity 2
  reassign_maps yes
  fast_io_fail_tmo  5
  async_timeout 5
  flush_on_last_del no
  delay_watch_checks no
  delay_wait_checks no
  find_multipaths yes
  checker_timeout 10
  hwtable_regex_match yes
  reload_readwrite no
  force_sync yes
  config_dir /etc/multipath/conf.d
}

# Sections without empty lines in between
blacklist {
       wwid 26353900f02796769
	devnode \"^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*\"

    # Comments and blank lines inside a section
	devnode \"^hd[a-z]\"

}
multipaths {
	multipath {
		wwid			3600508b4000156d700012000000b0000
		alias			yellow
		path_grouping_policy	multibus
		path_checker		readsector0
		path_selector		\"round-robin 0\"
		failback		manual
		rr_weight		priorities
		no_path_retry		5
        flush_on_last_del yes
	}
	multipath {
		wwid			1DEC_____321816758474
		alias			red
	}
}
devices {
	device {
		vendor			\"COMPAQ  \"
		product			\"HSV110 (C)COMPAQ\"
		path_grouping_policy	multibus
		getuid_callout          \"/sbin/scsi_id --whitelisted /dev/%n\"
		path_checker		readsector0
		path_selector		\"round-robin 0\"
		hardware_handler	\"0\"
		failback		15
		rr_weight		priorities
		rr_min_io_rq		75
		no_path_retry		queue
        reservation_key a12345
	}
	device {
		vendor			\"COMPAQ  \"
		product			\"MSA1000         \"
		path_grouping_policy	multibus
		polling_interval	9
        delay_watch_checks 10
        delay_wait_checks 10
	}
}\n"

test Multipath.lns get conf =
  { "#comment" = "Blacklist all devices by default." }
  { "blacklist"
    { "devnode" = "*" }
    { "wwid"    = "*" } }
  { }
  { "#comment" = "By default, devices with vendor = \"IBM\" and product = \"S/390.*\" are" }
  { "#comment" = "blacklisted. To enable mulitpathing on these devies, uncomment the" }
  { "#comment" = "following lines." }
  { "blacklist_exceptions"
    { "device"
      { "vendor" = "IBM" }
      { "product" = "S/390.*" } } }
  { }
  { }
  { "#comment" = "Here is an example of how to configure some standard options." }
  { }
  { }
  { "defaults"
    { "udev_dir" = "/dev" }
    { "polling_interval" = "10" }
    { "selector" = "round-robin 0" }
    { "path_grouping_policy" = "multibus" }
    { "getuid_callout" = "/sbin/scsi_id --whitelisted /dev/%n" }
    { "prio" = "alua" }
    { "path_checker" = "readsector0" }
    { "rr_min_io" = "100" }
    { "max_fds" = "8192" }
    { "rr_weight" = "priorities" }
    { "failback" = "immediate" }
    { "no_path_retry" = "fail" }
    { "user_friendly_names" = "yes" }
    { "dev_loss_tmo" = "30" }
    { "max_polling_interval" = "300" }
    { "verbosity" = "2" }
    { "reassign_maps" = "yes" }
    { "fast_io_fail_tmo" = "5" }
    { "async_timeout" = "5" }
    { "flush_on_last_del" = "no" }
    { "delay_watch_checks" = "no" }
    { "delay_wait_checks" = "no" }
    { "find_multipaths" = "yes" }
    { "checker_timeout" = "10" }
    { "hwtable_regex_match" = "yes" }
    { "reload_readwrite" = "no" }
    { "force_sync" = "yes" }
    { "config_dir" = "/etc/multipath/conf.d" } }
  { }
  { "#comment" = "Sections without empty lines in between" }
  { "blacklist"
    { "wwid" = "26353900f02796769" }
    { "devnode" = "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" }
    { }
    { "#comment" = "Comments and blank lines inside a section" }
    { "devnode" = "^hd[a-z]" }
    { } }
  { "multipaths"
    { "multipath"
      { "wwid" = "3600508b4000156d700012000000b0000" }
      { "alias" = "yellow" }
      { "path_grouping_policy" = "multibus" }
      { "path_checker" = "readsector0" }
      { "path_selector" = "round-robin 0" }
      { "failback" = "manual" }
      { "rr_weight" = "priorities" }
      { "no_path_retry" = "5" }
      { "flush_on_last_del" = "yes" } }
    { "multipath"
      { "wwid" = "1DEC_____321816758474" }
      { "alias" = "red" } } }
  { "devices"
    { "device"
      { "vendor" = "COMPAQ  " }
      { "product" = "HSV110 (C)COMPAQ" }
      { "path_grouping_policy" = "multibus" }
      { "getuid_callout" = "/sbin/scsi_id --whitelisted /dev/%n" }
      { "path_checker" = "readsector0" }
      { "path_selector" = "round-robin 0" }
      { "hardware_handler" = "0" }
      { "failback" = "15" }
      { "rr_weight" = "priorities" }
      { "rr_min_io_rq" = "75" }
      { "no_path_retry" = "queue" }
      { "reservation_key" = "a12345" } }
    { "device"
      { "vendor" = "COMPAQ  " }
      { "product" = "MSA1000         " }
      { "path_grouping_policy" = "multibus" }
      { "polling_interval" = "9" }
      { "delay_watch_checks" = "10" }
      { "delay_wait_checks" = "10" } } }

test Multipath.lns get "blacklist {
        devnode \".*\"
        wwid \"([a-z]+|ab?c).*\"
}\n" =
  { "blacklist"
    { "devnode" = ".*" }
    { "wwid" = "([a-z]+|ab?c).*" } }

test Multipath.lns get "blacklist {\n property \"[a-z]+\"\n}\n" =
  { "blacklist"
    { "property" = "[a-z]+" } }

(* Check that '""' inside a string works *)
test Multipath.lns get "blacklist {
  device {
    vendor SomeCorp
    product \"2.5\"\" SSD\"
  }
}\n" =
  { "blacklist"
    { "device"
      { "vendor" = "SomeCorp" }
      { "product" = "2.5\"\" SSD" } } }

(* Issue #583 - allow optional quotes around values and strip them *)
test Multipath.lns get "devices {
  device {
    vendor \"COMPELNT\"
    product \"Compellent Vol\"
    path_grouping_policy \"multibus\"
    path_checker \"tur\"
    features \"0\"
    hardware_handler \"0\"
    prio \"const\"
    failback \"immediate\"
    rr_weight \"uniform\"
    no_path_retry \"queue\"
  }
}\n" =
  { "devices"
    { "device"
      { "vendor" = "COMPELNT" }
      { "product" = "Compellent Vol" }
      { "path_grouping_policy" = "multibus" }
      { "path_checker" = "tur" }
      { "features" = "0" }
      { "hardware_handler" = "0" }
      { "prio" = "const" }
      { "failback" = "immediate" }
      { "rr_weight" = "uniform" }
      { "no_path_retry" = "queue" } } }
