REGTEST: mailers: add new test for 'mailers' section

This test verifies the mailers section works properly by checking that
it sends the proper amount of mails when health-checks are changing and
or marking a server up/down

The test currently fails on all versions of haproxy i tried with varying
results:

- 1.9.0 produces thousands of mails.
- 1.8.14 only sends 1 mail, needs a 200ms 'timeout mail' to succeed
- 1.7.11 only sends 1 mail, needs a 200ms 'timeout mail' to succeed
- 1.6 only sends 1 mail, (does not have the 'timeout mail' setting implemented)
diff --git a/reg-tests/mailers/k_healthcheckmail.lua b/reg-tests/mailers/k_healthcheckmail.lua
new file mode 100644
index 0000000..9c75877
--- /dev/null
+++ b/reg-tests/mailers/k_healthcheckmail.lua
@@ -0,0 +1,105 @@
+
+local vtc_port1 = 0
+local mailsreceived = 0
+local mailconnectionsmade = 0
+local healthcheckcounter = 0
+
+core.register_action("bug", { "http-res" }, function(txn)
+	data = txn:get_priv()
+	if not data then
+		data = 0
+	end
+	data = data + 1
+	print(string.format("set to %d", data))
+	txn.http:res_set_status(200 + data)
+	txn:set_priv(data)
+end)
+
+core.register_service("luahttpservice", "http", function(applet)
+	local response = "?"
+	local responsestatus = 200
+       if applet.path == "/setport" then
+		vtc_port1 = applet.headers["vtcport1"][0]
+		response = "OK"
+	end
+	if applet.path == "/svr_healthcheck" then
+		healthcheckcounter = healthcheckcounter + 1
+		if healthcheckcounter < 2 or healthcheckcounter > 6 then
+			responsestatus = 403
+		end
+	end
+
+	applet:set_status(responsestatus)
+       if applet.path == "/checkMailCounters" then
+		response = "MailCounters"
+		applet:add_header("mailsreceived", mailsreceived)
+		applet:add_header("mailconnectionsmade", mailconnectionsmade)
+	end
+	applet:start_response()
+	applet:send(response)
+end)
+
+core.register_service("fakeserv", "http", function(applet)
+	applet:set_status(200)
+	applet:start_response()
+end)
+
+function RecieveAndCheck(applet, expect)
+	data = applet:getline()
+	if data:sub(1,expect:len()) ~= expect then
+		core.Info("Expected: "..expect.." but got:"..data:sub(1,expect:len()))
+		applet:send("Expected: "..expect.." but got:"..data.."\r\n")
+		return false
+	end
+	return true
+end
+
+core.register_service("mailservice", "tcp", function(applet)
+	core.Info("############# Mailservice Called #############")
+	mailconnectionsmade = mailconnectionsmade + 1
+	applet:send("220 Welcome\r\n")
+	local data
+
+	if RecieveAndCheck(applet, "EHLO") == false then
+		return
+	end
+	applet:send("250 OK\r\n")
+	if RecieveAndCheck(applet, "MAIL FROM:") == false then
+		return
+	end
+	applet:send("250 OK\r\n")
+	if RecieveAndCheck(applet, "RCPT TO:") == false then
+		return
+	end
+	applet:send("250 OK\r\n")
+	if RecieveAndCheck(applet, "DATA") == false then
+		return
+	end
+	applet:send("354 OK\r\n")
+	core.Info("#### Send your mailbody")
+	local endofmail = false
+	local subject = ""
+	while endofmail ~= true do
+		data = applet:getline() -- BODY CONTENT
+		--core.Info(data)
+		if data:sub(1, 9) == "Subject: " then
+			subject = data
+		end
+		if (data == "\r\n") then
+			data = applet:getline() -- BODY CONTENT
+			core.Info(data)
+			if (data == ".\r\n") then
+				endofmail = true
+			end
+		end
+	end
+	core.Info("#### Body recieved OK")
+	applet:send("250 OK\r\n")
+
+	if RecieveAndCheck(applet, "QUIT") == false then
+		return
+	end
+	applet:send("221 Mail queued for delivery to /dev/null \r\n")
+	core.Info("Mail queued for delivery to /dev/null subject: "..subject)
+	mailsreceived = mailsreceived + 1
+end)