diff --git a/octavia_tempest_plugin/contrib/__init__.py b/octavia_tempest_plugin/contrib/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/octavia_tempest_plugin/contrib/__init__.py
diff --git a/octavia_tempest_plugin/contrib/httpd/README.md b/octavia_tempest_plugin/contrib/httpd/README.md
new file mode 100644
index 0000000..a627491
--- /dev/null
+++ b/octavia_tempest_plugin/contrib/httpd/README.md
@@ -0,0 +1,6 @@
+To build a statically linked binary for httpd on Ubuntu (can run anywhere):
+
+```sh
+sudo apt-get install -y golang
+go build -ldflags "-w -linkmode external -extldflags -static" -o httpd.bin httpd.go
+```
diff --git a/octavia_tempest_plugin/contrib/httpd/__init__.py b/octavia_tempest_plugin/contrib/httpd/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/octavia_tempest_plugin/contrib/httpd/__init__.py
diff --git a/octavia_tempest_plugin/contrib/httpd/httpd.bin b/octavia_tempest_plugin/contrib/httpd/httpd.bin
new file mode 100755
index 0000000..fbae460
--- /dev/null
+++ b/octavia_tempest_plugin/contrib/httpd/httpd.bin
Binary files differ
diff --git a/octavia_tempest_plugin/contrib/httpd/httpd.go b/octavia_tempest_plugin/contrib/httpd/httpd.go
new file mode 100644
index 0000000..db47242
--- /dev/null
+++ b/octavia_tempest_plugin/contrib/httpd/httpd.go
@@ -0,0 +1,107 @@
+package main
+
+import (
+	"flag"
+	"fmt"
+	"io"
+	"net/http"
+	"sync"
+	"time"
+)
+
+var sess_cookie http.Cookie
+var resp string
+
+type ConnectionCount struct {
+	mu         sync.Mutex
+	cur_conn   int
+	max_conn   int
+	total_conn int
+}
+
+var scoreboard ConnectionCount
+
+func (cc *ConnectionCount) open() {
+	cc.mu.Lock()
+	defer cc.mu.Unlock()
+
+	cc.cur_conn++
+	cc.total_conn++
+}
+
+func (cc *ConnectionCount) close() {
+	cc.mu.Lock()
+	defer cc.mu.Unlock()
+
+	if cc.cur_conn > cc.max_conn {
+		cc.max_conn = cc.cur_conn
+	}
+	cc.cur_conn--
+}
+
+func (cc *ConnectionCount) stats() (int, int) {
+	cc.mu.Lock()
+	defer cc.mu.Unlock()
+
+	return cc.max_conn, cc.total_conn
+}
+
+func (cc *ConnectionCount) reset() {
+	cc.mu.Lock()
+	defer cc.mu.Unlock()
+
+	cc.max_conn = 0
+	cc.total_conn = 0
+}
+
+func root_handler(w http.ResponseWriter, r *http.Request) {
+	scoreboard.open()
+	defer scoreboard.close()
+
+	http.SetCookie(w, &sess_cookie)
+	io.WriteString(w, resp)
+}
+
+func slow_handler(w http.ResponseWriter, r *http.Request) {
+	scoreboard.open()
+	defer scoreboard.close()
+
+	delay, err := time.ParseDuration(r.URL.Query().Get("delay"))
+	if err != nil {
+		delay = 3 * time.Second
+	}
+
+	time.Sleep(delay)
+	http.SetCookie(w, &sess_cookie)
+	io.WriteString(w, resp)
+}
+
+func stats_handler(w http.ResponseWriter, r *http.Request) {
+	http.SetCookie(w, &sess_cookie)
+	max_conn, total_conn := scoreboard.stats()
+	fmt.Fprintf(w, "max_conn=%d\ntotal_conn=%d\n", max_conn, total_conn)
+}
+
+func reset_handler(w http.ResponseWriter, r *http.Request) {
+	http.SetCookie(w, &sess_cookie)
+	scoreboard.reset()
+	fmt.Fprintf(w, "reset\n")
+}
+
+func main() {
+	portPtr := flag.Int("port", 8080, "TCP port to listen on")
+	idPtr := flag.String("id", "1", "Server ID")
+
+	flag.Parse()
+
+	resp = fmt.Sprintf("%s", *idPtr)
+	sess_cookie.Name = "JESSIONID"
+	sess_cookie.Value = *idPtr
+
+	http.HandleFunc("/", root_handler)
+	http.HandleFunc("/slow", slow_handler)
+	http.HandleFunc("/stats", stats_handler)
+	http.HandleFunc("/reset", reset_handler)
+	portStr := fmt.Sprintf(":%d", *portPtr)
+	http.ListenAndServe(portStr, nil)
+}
