Add integration tests for sync clients

Prior to this commit, we didn't actually have any tests that
started a real web server and made a real request.  This
commit adds tests that do this for the clojure and Java
synchronous clients, using SSL.
This commit is contained in:
Chris Price 2014-03-28 17:33:27 -07:00
parent 9020eed85f
commit db53a75f34
6 changed files with 62 additions and 10 deletions

View file

@ -1,3 +1,6 @@
(def ks-version "0.5.3")
(def tk-version "0.3.8")
(defproject puppetlabs/http-client "0.1.3-SNAPSHOT"
:description "HTTP client wrapper"
:license {:name "Apache License, Version 2.0"
@ -5,13 +8,18 @@
:dependencies [[org.clojure/clojure "1.5.1"]
[http-kit "2.1.16"]
[puppetlabs/kitchensink "0.5.2"]
[puppetlabs/kitchensink ~ks-version]
[org.clojure/tools.logging "0.2.6"]
[org.slf4j/slf4j-api "1.7.6"]]
:source-paths ["src/clj"]
:java-source-paths ["src/java"]
:profiles {:dev {:dependencies [[puppetlabs/kitchensink ~ks-version :classifier "test"]
[puppetlabs/trapperkeeper ~tk-version]
[puppetlabs/trapperkeeper ~tk-version :classifier "test"]
[puppetlabs/trapperkeeper-webserver-jetty9 "0.3.5"]]}}
:deploy-repositories [["releases" {:url "https://clojars.org/repo"
:username :env/clojars_jenkins_username
:password :env/clojars_jenkins_password

View file

@ -8,9 +8,9 @@
(deftest ssl-config-with-files
(let [req {:url "http://localhost"
:method :get
:ssl-cert (resource "resources/cert.pem")
:ssl-key (resource "resources/key.pem")
:ssl-ca-cert (resource "resources/ca.pem")}
:ssl-cert (resource "ssl/cert.pem")
:ssl-key (resource "ssl/key.pem")
:ssl-ca-cert (resource "ssl/ca.pem")}
configured-req (http/configure-ssl req)]
(testing "configure-ssl sets up an SSLEngine when given cert, key, ca-cert"
@ -33,9 +33,9 @@
(let [req {:url "http://localhost"
:method :get
:ssl-context (ks-ssl/pems->ssl-context
(resource "resources/cert.pem")
(resource "resources/key.pem")
(resource "resources/ca.pem"))}
(resource "ssl/cert.pem")
(resource "ssl/key.pem")
(resource "ssl/ca.pem"))}
configured-req (http/configure-ssl req)]
(testing "configure-ssl uses an existing ssl context"
@ -44,9 +44,9 @@
(deftest ssl-config-with-sslengine
(let [req {:url "http://localhost"
:method :get
:ssl-cert (resource "resources/cert.pem")
:ssl-key (resource "resources/key.pem")
:ssl-ca-cert (resource "resources/ca.pem")
:ssl-cert (resource "ssl/cert.pem")
:ssl-key (resource "ssl/key.pem")
:ssl-ca-cert (resource "ssl/ca.pem")
:sslengine "thing"}
configured-req (http/configure-ssl req)]
(testing "configure-ssl does nothing when :sslengine is given"

View file

@ -0,0 +1,44 @@
(ns puppetlabs.http.client.sync-test
(:import (com.puppetlabs.http.client SyncHttpClient RequestOptions))
(:require [clojure.test :refer :all]
[puppetlabs.trapperkeeper.core :as tk]
[puppetlabs.trapperkeeper.testutils.bootstrap :as testutils]
[puppetlabs.trapperkeeper.testutils.logging :as testlogging]
[puppetlabs.trapperkeeper.services.webserver.jetty9-service :as jetty9]
[puppetlabs.http.client.sync :as sync]))
(defn app
[req]
{:status 200
:body "Hello, World!"})
(tk/defservice test-web-service
[[:WebserverService add-ring-handler]]
(init [this context]
(add-ring-handler app "/hello")
context))
(deftest sync-client-test
(testlogging/with-test-logging
(testutils/with-app-with-config app
[jetty9/jetty9-service test-web-service]
{:webserver {:ssl-host "0.0.0.0"
:ssl-port 10080
:ssl-ca-cert "./dev-resources/ssl/ca.pem"
:ssl-cert "./dev-resources/ssl/cert.pem"
:ssl-key "./dev-resources/ssl/key.pem"}}
(testing "java sync client"
(let [options (.. (RequestOptions. "https://localhost:10080/hello/")
(setSslCert "./dev-resources/ssl/cert.pem")
(setSslKey "./dev-resources/ssl/key.pem")
(setSslCaCert "./dev-resources/ssl/ca.pem"))
response (SyncHttpClient/get options)]
(is (= 200 (.getStatus response)))
(is (= "Hello, World!" (slurp (.getBody response))))))
(testing "clojure sync client"
(let [response (sync/get "https://localhost:10080/hello/"
{:ssl-cert "./dev-resources/ssl/cert.pem"
:ssl-key "./dev-resources/ssl/key.pem"
:ssl-ca-cert "./dev-resources/ssl/ca.pem"})]
(is (= 200 (:status response)))
(is (= "Hello, World!" (slurp (:body response)))))))))