├── .github └── tokenmill-logo.svg ├── .gitignore ├── .gitlab-ci.yml ├── Dockerfile ├── Dockerfile.deps ├── LICENSE ├── Makefile ├── README.md ├── deps.edn ├── dev └── fast_url_check │ └── benchmark.clj ├── src └── fast_url_check │ ├── core.clj │ └── java.clj └── test ├── fast_url_check └── core_test.clj └── resources ├── bulk-test.txt └── logback.xml /.github/tokenmill-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | image/svg+xml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .cpcache/ 2 | .idea/ 3 | **/*.iml 4 | libsunec.so 5 | pom.xml 6 | target/* 7 | url-checker 8 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | stages: 2 | - deps 3 | - test 4 | 5 | update-deps: 6 | stage: deps 7 | image: docker:stable 8 | only: 9 | changes: 10 | - deps.edn 11 | - Dockerfile.deps 12 | before_script: 13 | - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com 14 | script: 15 | - docker build -f Dockerfile.deps -t registry.gitlab.com/tokenmill/crawl/fast-url-access-checker:deps . 16 | - docker push registry.gitlab.com/tokenmill/crawl/fast-url-access-checker:deps 17 | - docker rmi registry.gitlab.com/tokenmill/crawl/fast-url-access-checker:deps 18 | 19 | lint-and-unit-test: 20 | stage: test 21 | when: always 22 | image: registry.gitlab.com/tokenmill/crawl/fast-url-access-checker:deps 23 | script: 24 | - clojure -A:kibit 25 | - clojure -A:eastwood 26 | - clojure -A:test -e integration 27 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM tokenmill/clojure:graalvm-ce-19.0.0-tools-deps-1.10.0.442 as builder 2 | 3 | RUN mkdir -p /usr/src/app 4 | WORKDIR /usr/src/app 5 | 6 | COPY deps.edn /usr/src/app/ 7 | RUN clojure -R:native-image 8 | COPY . /usr/src/app 9 | RUN clojure -A:native-image 10 | RUN cp $JAVA_HOME/jre/lib/amd64/libsunec.so . 11 | RUN cp target/app url-checker 12 | -------------------------------------------------------------------------------- /Dockerfile.deps: -------------------------------------------------------------------------------- 1 | FROM registry.gitlab.com/tokenmill/clojure:1 as builder 2 | 3 | RUN mkdir -p /usr/src/app 4 | WORKDIR /usr/src/app 5 | COPY deps.edn /usr/src/app/ 6 | RUN clojure -R:test:dev:kibit:eastwood -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2019 Tokenmill, UAB 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | unit-test: 2 | clojure -A:test -e integration 3 | 4 | integration-test: 5 | clojure -A:test -i integration 6 | 7 | lint: 8 | clojure -A:kibit 9 | clojure -A:eastwood 10 | 11 | uberjar: 12 | clojure -A:uberjar 13 | 14 | check-urls: 15 | clojure -m fast-url-check.core $(file-name) 16 | 17 | benchmark: 18 | clojure -A:dev -m fast-url-check.benchmark $(file-name) 19 | 20 | build-graal-url-checker: 21 | docker build --target builder -f Dockerfile -t fast-url-checker . 22 | docker rm build || true 23 | docker create --name build fast-url-checker 24 | docker cp build:/usr/src/app/url-checker url-checker 25 | docker cp build:/usr/src/app/libsunec.so libsunec.so 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | # URL Access Checker 6 | 7 | This tool will take a list URLs of the sites, identify a correct form of the URL and run HTTP GET request against the URL to check its HTTP status. In cases where the address is not completely specified - a protocol is missing, 'www' part is not included when it is needed - a correct form of the URL will be identified. The library will also validate the correctness of the URL and in cases of redirection will return a target URL. 8 | 9 | It is a Clojure library. Additionaly an interface to call it from Java is provided. As well as native binary distribution to be used as a command line tool. 10 | 11 | # Features 12 | 13 | * Provides the interface for a single URL check. 14 | * Provides the interface for bulk URL checks. 15 | * In the case of bulk URL check library parallelizes checking to ensure maximum speed of the entire process. 16 | * In cases of incompletely formed URLs correct protocol (http or https) will be detected. Access with 'www' part if it is missing will also be tested. 17 | * Redirection will be detected and target URL returned. 18 | * URL check returns the following data: HTTP status, target URL, response time. 19 | 20 | # How to Use 21 | 22 | ## Command Line 23 | 24 | Use URL checker can be started from the command line with the following instruction 25 | ``` 26 | ./url-checker test/resources/bulk-test.txt 27 | ``` 28 | 29 | See bellow for the output sample. 30 | 31 | 32 | URL checker can be executed via command line using intalled [Clojure](https://clojure.org/) tools. Execution example with project's test url set: 33 | 34 | ``` 35 | clojure -m fast-url-check.core test/resources/bulk-test.txt 36 | ``` 37 | 38 | Or via project's Makefile 39 | 40 | ``` 41 | make check-urls file-name=test/resources/bulk-test.txt 42 | ``` 43 | 44 | This will result in CSV formated output of URL checking results 45 | 46 | ``` 47 | timestamp,seed,url,status,status-type,response-time,exception 48 | 2019-05-30T10:43:47.674Z,cameron.slb.com,https://www.products.slb.com,302,redirect,431, 49 | 2019-05-30T10:43:47.691Z,co.williams.com,https://co.williams.com/,200,accessible,622, 50 | 2019-05-30T10:43:47.691Z,company.ingersollrand.com,https://www.company.ingersollrand.com/,200,accessible,645, 51 | ... 52 | 2019-05-30T10:43:51.950Z,http://aes.com,https://aes.com/,200,accessible,3632, 53 | ``` 54 | 55 | 56 | ## Clojure 57 | 58 | Singe URL check example. 59 | 60 | ``` 61 | (require '[fast-url-check.core :refer :all]) 62 | 63 | (check-access "tokenmill.lt") 64 | => 65 | {:url "http://www.tokenmill.lt/", 66 | :seed "tokenmill.lt", 67 | :status 200, 68 | :response-time 7, 69 | :status-type :accessible} 70 | ``` 71 | 72 | Bulk URL check example 73 | 74 | ``` 75 | 76 | (check-access-bulk ["tokenmill.lt" "15min.lt" "https://news.ycombinator.com"]) 77 | => 78 | ({:url "http://www.tokenmill.lt/", 79 | :seed "tokenmill.lt", 80 | :status 200, 81 | :response-time 10, 82 | :status-type :accessible} 83 | {:url "https://www.15min.lt/", 84 | :seed "15min.lt", 85 | :status 200, 86 | :response-time 46, 87 | :status-type :accessible} 88 | {:url "https://news.ycombinator.com/", 89 | :seed "https://news.ycombinator.com", 90 | :status 301, 91 | :response-time 379, 92 | :status-type :redirect}) 93 | 94 | ``` 95 | 96 | ## Java 97 | 98 | Java code example: 99 | 100 | ``` 101 | import crawl.tools.URLCheck; 102 | 103 | import java.util.Map; 104 | import java.util.Arrays; 105 | import java.util.Collection; 106 | 107 | public class MyClass { 108 | 109 | public static void main(String[] args) { 110 | System.out.println(URLCheck.checkAccess("tokenmill.lt")); 111 | 112 | String[] urls = {"15min.lt", "https://news.ycombinator.com"}; 113 | Collection validatedUrls = URLCheck.checkAccessBulk(Arrays.asList(urls)); 114 | for(Map validatedUrl : validatedUrls) { 115 | System.out.println(validatedUrl); 116 | } 117 | } 118 | } 119 | 120 | ``` 121 | 122 | # Benchmark 123 | 124 | This tool aims to provide top performance in bulk URL checking. This repository includes a [reference set](https://github.com/tokenmill/fast-url-access-checker/blob/master/test/resources/bulk-test.txt) of 1000 URLs for consistent performance checking. 125 | 126 | Benchmark test executed against the reference URL set performs with average _0.3 seconds per URL_. Execution times are subject to the network conditions and hardware the tests are executed on. 127 | 128 | Benchmark test can be launched with `make benchmark` 129 | 130 | ## License 131 | 132 | Copyright © 2019 [TokenMill UAB](http://www.tokenmill.lt). 133 | 134 | Distributed under the The Apache License, Version 2.0. 135 | -------------------------------------------------------------------------------- /deps.edn: -------------------------------------------------------------------------------- 1 | {:deps {org.clojure/clojure {:mvn/version "1.10.1"} 2 | org.clojure/tools.logging {:mvn/version "0.5.0"} 3 | org.clojure/data.csv {:mvn/version "0.1.4"} 4 | ch.qos.logback/logback-classic {:mvn/version "1.2.3"} 5 | http-kit/http-kit {:mvn/version "2.3.0"} 6 | clojurewerkz/urly {:mvn/version "1.0.0"} 7 | cheshire {:mvn/version "5.9.0"}} 8 | :paths ["src"] 9 | :mvn/repos {"central" {:url "https://repo1.maven.org/maven2/"} 10 | "clojars" {:url "https://repo.clojars.org/"}} 11 | :aliases {:test {:extra-paths ["test"] 12 | :extra-deps {com.cognitect/test-runner {:git/url "https://github.com/cognitect-labs/test-runner.git" 13 | :sha "028a6d41ac9ac5d5c405dfc38e4da6b4cc1255d5"}} 14 | :main-opts ["-m" "cognitect.test-runner"]} 15 | :dev {:extra-paths ["dev"]} 16 | :kibit {:extra-deps {jonase/kibit {:mvn/version "0.1.6"}} 17 | :main-opts ["-e" "(require,'[kibit.driver,:as,k])(k/external-run,[\"src\"],nil)"]} 18 | :eastwood {:main-opts ["-m" "eastwood.lint" "{:source-paths,[\"src\"]}"] 19 | :extra-deps {jonase/eastwood {:mvn/version "RELEASE"}}} 20 | :uberjar {:extra-deps {luchiniatwork/cambada {:git/url "https://github.com/xfthhxk/cambada" 21 | :sha "8fdc7d29a41620ad3e9e6210fd7140f3a4c7936b" 22 | :exclusions [org.slf4j/slf4j-nop]}} 23 | :main-opts ["-m" "cambada.uberjar" 24 | "-m" "fast_url_check.java"]} 25 | :native-image 26 | {:extra-deps {luchiniatwork/cambada {:git/url "https://github.com/xfthhxk/cambada" 27 | :sha "8fdc7d29a41620ad3e9e6210fd7140f3a4c7936b" 28 | :exclusions [org.slf4j/slf4j-nop]}} 29 | :main-opts ["-m" "cambada.native-image" 30 | "-m" "fast_url_check.core" 31 | "-a" "fast-url-check.core" 32 | "-O" "-initialize-at-build-time" 33 | "-O" "-enable-all-security-services" 34 | "-O" "-initialize-at-run-time=org.httpkit.client.SslContextFactory" 35 | "-O" "-initialize-at-run-time=org.httpkit.client.HttpClient"]}}} 36 | -------------------------------------------------------------------------------- /dev/fast_url_check/benchmark.clj: -------------------------------------------------------------------------------- 1 | (ns fast-url-check.benchmark 2 | (:require [clojure.java.io :as io] 3 | [clojure.tools.logging :as log] 4 | [fast-url-check.core :refer [check-access-bulk]])) 5 | 6 | (defn -main [& [input-path]] 7 | (with-open [rdr (io/reader (io/file (or input-path "test/resources/bulk-test.txt")))] 8 | (let [urls (line-seq rdr) 9 | start-time (System/currentTimeMillis)] 10 | (doseq [validated-url (check-access-bulk urls)] 11 | (log/infof "%s - %s" (:url validated-url) (:status validated-url))) 12 | (let [total-time-seconds (float (/ (- (System/currentTimeMillis) start-time) 1000)) 13 | average-time-seconds (/ total-time-seconds (count urls))] 14 | (log/infof "Number of URLs tested: %s" (count urls)) 15 | (log/infof "Total time: %s seconds" total-time-seconds) 16 | (log/infof "Average time: %s seconds" average-time-seconds))))) 17 | -------------------------------------------------------------------------------- /src/fast_url_check/core.clj: -------------------------------------------------------------------------------- 1 | (ns fast-url-check.core 2 | (:gen-class) 3 | (:require [clojure.tools.logging :as log] 4 | [org.httpkit.client :as http] 5 | [clojure.string :as s] 6 | [clojurewerkz.urly.core :as u] 7 | [clojure.java.io :as io] 8 | [cheshire.core :as json] 9 | [clojure.data.csv :as csv]) 10 | (:import (org.httpkit.client TimeoutException) 11 | (java.time Instant))) 12 | 13 | (def default-opts 14 | {:keepalive -1 15 | :socket-timeout 5000 16 | :conn-timeout 5000 17 | :timeout 5000 18 | :insecure? true 19 | :follow-redirects false 20 | :user-agent "Mozilla/5.0 (X11\\; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36" 21 | :headers {"accept-language" "en-US,en;q=0.8,lt;q=0.6" 22 | "accept" "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"}}) 23 | 24 | (defn generate-candidates 25 | "Given URL a series of candidate url modifications are produced. 26 | For example starting with 'example.org' it will mutate this initial host string 27 | with different protocols and optional path elements. 28 | 29 | Host mutations are defined in terms of protocol changes (https, http) 30 | and host formatting with optional 'www' part. 31 | 32 | Ordering of mutations is important for generated URLs will be checked 33 | in mutation order. Thus the right order saves time on network operations. " 34 | [url] 35 | (try 36 | (let [url-obj (u/url-like (s/trim url)) 37 | host (-> url-obj (u/host-of) (s/replace #"(?i)^www\." "")) 38 | url-variation-templates [["https" "www.%s"] 39 | ["https" "%s"] 40 | ["http" "www.%s"] 41 | ["http" "%s"]]] 42 | (map (fn [[protocol host-template]] 43 | (-> url-obj (.mutateProtocol protocol) (.mutateHost (format host-template host)) (str))) 44 | url-variation-templates)) 45 | (catch Exception e 46 | (log/debugf "Failed to generate candidates for %s with error %s" url (.getMessage e)) 47 | [url]))) 48 | 49 | (defn remove-url-in-error-message [message url] 50 | (let [url-obj (u/url-like url) 51 | host (u/host-of (or url-obj ""))] 52 | (reduce #(s/replace %1 %2 "") message [url (or host "") #"^: " #": $"]))) 53 | 54 | (defn resolve-redirect-url [url redirect-url] 55 | (if (u/relative? redirect-url) 56 | (u/resolve url redirect-url) 57 | redirect-url)) 58 | 59 | (defn send-request 60 | "Sends http request to `url` and returns a map with response information as well as `seed`. 61 | Default options for 'http-kit' may be altered by providing option map for keyword argument `:opts`. 62 | 63 | Responses are categorized based on their status: 64 | 2**: accessible 65 | 3**: redirect 66 | 4**: client-error 67 | 5**: server-error 68 | Additional types: timeout, error, other, too-many-retries." 69 | [url seed & {:keys [opts]}] 70 | (let [start-time (System/currentTimeMillis)] 71 | (http/request 72 | (merge default-opts opts {:url url :method :head}) 73 | (fn [{:keys [status headers error]}] 74 | (let [redirect-url (get headers :location "") 75 | status-type (some-> status (str) ^Character (first) (Character/getNumericValue)) 76 | exception (some-> ^Exception error (.getMessage) (remove-url-in-error-message url))] 77 | (merge {:url url 78 | :seed seed 79 | :status status 80 | :response-time (- (System/currentTimeMillis) start-time)} 81 | (cond 82 | (= 2 status-type) {:status-type :accessible} 83 | (= 3 status-type) {:url (resolve-redirect-url url redirect-url) :status-type :redirect} 84 | (= 4 status-type) {:status-type :client-error} 85 | (= 5 status-type) {:status-type :server-error} 86 | (instance? TimeoutException error) {:status 408 :status-type :timeout} 87 | (some? error) {:status 999 :status-type :error :exception exception} 88 | :else {:status-type :other}))))))) 89 | 90 | (defn send-request-with-retry [url seed & {:keys [opts]}] 91 | (loop [retry-count 0] 92 | (let [{:keys [response exception]} 93 | (try 94 | {:response (send-request url seed :opts opts)} 95 | (catch Exception e 96 | (log/debugf "Failed to send request to %s with error %s" url (.getMessage e)) 97 | {:exception (.getMessage e)}))] 98 | (cond 99 | (some? response) response 100 | (< 2 retry-count) (ref {:url url :seed seed :status-type :too-many-retries :exception exception}) 101 | :else (recur (inc retry-count)))))) 102 | 103 | (defn pick-candidate 104 | "Selects most fit candidate based on it's status type given collection of response maps. 105 | If there are multiple candidates of the same status type, first one is returned." 106 | [responses] 107 | (let [status-types (group-by :status-type responses)] 108 | (loop [status [:accessible :redirect :other :timeout :client-error :server-error :error :too-many-retries]] 109 | (when-let [[x & xs] status] 110 | (if (contains? status-types x) 111 | (first (get status-types x)) 112 | (recur xs)))))) 113 | 114 | (defn check-access [url & {:keys [opts]}] 115 | (some->> url 116 | (generate-candidates) 117 | (map #(send-request-with-retry % url :opts opts)) 118 | (doall) 119 | (map deref) 120 | (pick-candidate))) 121 | 122 | (defn check-access-bulk [urls & {:keys [opts]}] 123 | (pmap #(check-access % :opts opts) urls)) 124 | 125 | (defn -main 126 | "Given path to file containing list of URLs as `input-path`, 127 | prints CSV lines with validated URLs to standard output. 128 | Additional http-kit options may be provided as JSON encoded map." 129 | [& [input-path opts]] 130 | (with-open [rdr (io/reader (io/file input-path))] 131 | (csv/write-csv *out* [["timestamp" "seed" "url" "status" "status-type" "response-time" "exception"]]) 132 | (doseq [{:keys [url seed status status-type response-time exception]} 133 | (check-access-bulk (line-seq rdr) :opts (json/decode opts true))] 134 | (csv/write-csv *out* [[(Instant/now) seed url status (name status-type) response-time exception]]) 135 | (flush))) 136 | (shutdown-agents)) 137 | -------------------------------------------------------------------------------- /src/fast_url_check/java.clj: -------------------------------------------------------------------------------- 1 | (ns fast-url-check.java 2 | (:gen-class 3 | :name crawl.tools.URLCheck 4 | :methods [^{:static true} [checkAccess [String] java.util.Map] 5 | ^{:static true} [checkAccess [String java.util.Map] java.util.Map] 6 | ^{:static true} [checkAccessBulk [java.util.Collection] java.util.Collection] 7 | ^{:static true} [checkAccessBulk [java.util.Collection java.util.Map] java.util.Collection]]) 8 | (:require [fast-url-check.core :refer :all] 9 | [clojure.walk :refer [keywordize-keys stringify-keys]])) 10 | 11 | (defn -checkAccess 12 | ([url] 13 | (-checkAccess url nil)) 14 | ([url opts] 15 | (-> (check-access url :opts (keywordize-keys opts)) 16 | (update :status-type name) 17 | (stringify-keys)))) 18 | 19 | (defn -checkAccessBulk 20 | ([urls] 21 | (-checkAccessBulk urls nil)) 22 | ([urls opts] 23 | (map #(-> % (update :status-type name) (stringify-keys)) 24 | (check-access-bulk urls :opts (keywordize-keys opts))))) 25 | -------------------------------------------------------------------------------- /test/fast_url_check/core_test.clj: -------------------------------------------------------------------------------- 1 | (ns fast-url-check.core-test 2 | (:require [clojure.test :refer :all] 3 | [fast-url-check.core :refer :all] 4 | [clojure.java.io :as io] 5 | [clojure.tools.logging :as log])) 6 | 7 | (deftest url-validator-test 8 | (testing "Access check" 9 | (are [url result] (= result (dissoc (check-access url) :response-time)) 10 | nil nil 11 | "tokenmill.lt" {:url "http://www.tokenmill.lt/" 12 | :status 200 13 | :status-type :accessible 14 | :seed "tokenmill.lt"} 15 | "tokenmill-.lt" {:url "tokenmill-.lt" 16 | :status 999 17 | :status-type :error 18 | :exception "host is null" 19 | :seed "tokenmill-.lt"})) 20 | (testing "Access check bulk" 21 | (is (= [] (check-access-bulk nil))) 22 | (is (= [{:url "http://www.tokenmill.lt/", :seed "tokenmill.lt", :status-type :accessible, :status 200} 23 | {:url "https://www.15min.lt/", :seed "15min.lt", :status-type :accessible, :status 200} 24 | {:url "https://www.google.lt/", :seed "google.lt", :status-type :accessible, :status 200}] 25 | (map #(dissoc % :response-time) (check-access-bulk ["tokenmill.lt" "15min.lt" "google.lt"]))))) 26 | (testing "URL generation" 27 | (let [result-1 ["https://www.15min.lt/" "https://15min.lt/" "http://www.15min.lt/" "http://15min.lt/"]] 28 | (are [url result] (= (generate-candidates url) result) 29 | "https://www.15min.lt" result-1 30 | "https://15min.lt" result-1 31 | "http://www.15min.lt" result-1 32 | "http://15min.lt" result-1 33 | ":www.15min.lt" [":www.15min.lt"] 34 | "www. 15min.lt" ["www. 15min.lt"]))) 35 | (testing "Error message parsing" 36 | (are [url message result] (= result (remove-url-in-error-message message url)) 37 | "https://www.pcbasics.biz/" 38 | "www.pcbasics.biz: Name or service not known" 39 | "Name or service not known" 40 | 41 | "http://www.1up-it.-com/" 42 | "host is null: http://www.1up-it.-com/" 43 | "host is null" 44 | 45 | "http://www.0-downtime.com" 46 | "Illegal character in scheme name at index 0: http://www.0-downtime.com" 47 | "Illegal character in scheme name at index 0" 48 | 49 | "http://www.advens.fr home.asp" 50 | "Illegal character in authority at index 7: http://www.advens.fr home.asp" 51 | "Illegal character in authority at index 7"))) 52 | 53 | (deftest candidate-generation 54 | (is (= ["https://www.tokenmill.lt/" 55 | "https://tokenmill.lt/" 56 | "http://www.tokenmill.lt/" 57 | "http://tokenmill.lt/"] 58 | (generate-candidates "tokenmill.lt"))) 59 | (is (= ["https://www.tokenmill.lt/" 60 | "https://tokenmill.lt/" 61 | "http://www.tokenmill.lt/" 62 | "http://tokenmill.lt/"] 63 | (generate-candidates "https://tokenmill.lt/")))) 64 | 65 | (deftest resolve-redirect-url-test 66 | (is (= "" (resolve-redirect-url "" ""))) 67 | (is (= "http://dsempire.org/kNeQm/" (resolve-redirect-url "http://dsempire.org" "/kNeQm/"))) 68 | (is (= "https://dsempire.org/" (resolve-redirect-url "http://dsempire.org" "https://dsempire.org/")))) 69 | 70 | (deftest ^:integration url-validator-benchmark 71 | (with-open [rdr (io/reader (io/file "test/resources/bulk-test.txt"))] 72 | (let [urls (take 100 (shuffle (line-seq rdr))) 73 | start-time (System/currentTimeMillis)] 74 | (doseq [validated-url (check-access-bulk urls)] 75 | (log/infof "%s - %s" (:url validated-url) (:status validated-url))) 76 | 77 | (let [total-time-seconds (float (/ (- (System/currentTimeMillis) start-time) 1000)) 78 | average-time-seconds (/ total-time-seconds (count urls))] 79 | (is (> 0.3 average-time-seconds)) 80 | 81 | (log/infof "Number of URLs tested: %s" (count urls)) 82 | (log/infof "Total time: %s seconds" total-time-seconds) 83 | (log/infof "Average time: %s seconds" average-time-seconds))))) 84 | -------------------------------------------------------------------------------- /test/resources/bulk-test.txt: -------------------------------------------------------------------------------- 1 | cameron.slb.com 2 | co.williams.com 3 | company.ingersollrand.com 4 | corporate.arcelormittal.com 5 | corporate.comcast.com 6 | corporate.exxonmobil.com 7 | corporate.ppg.com 8 | corporate.walmart.com 9 | enuma.com 10 | fetchrev.com 11 | getreplenish.com 12 | http://adobe.com 13 | http://adp.com 14 | http://aegon.com 15 | http://aes.com 16 | http://aetna.com 17 | http://aflac.com 18 | http://ageas.com 19 | http://agilent.com 20 | http://agnc.com 21 | http://agrium.com 22 | http://aia.com 23 | http://aibgroup.com 24 | http://aig.com 25 | http://airbusgroup.com 26 | http://airliquide.com 27 | http://bostonproperties.com 28 | http://bouygues.com 29 | http://bp.com 30 | http://brambles.com 31 | http://broadcom.com 32 | http://brookfield.com 33 | http://btplc.com 34 | http://bunge.com 35 | http://lifesciencesscotland.com 36 | http://lightcyber.com 37 | http://lightstonevc.com 38 | http://limberlink.com 39 | http://limmerlaser.de 40 | http://linguaflex.com 41 | http://linkfluence.com 42 | http://linkmedicine.com 43 | http://linkwellhealth.com 44 | http://lionbird.com 45 | http://lionstreet.com 46 | http://lipomed.com 47 | http://liquidm.com 48 | http://liquifix.com 49 | http://listen.com 50 | http://litescape.com 51 | http://littlebits.cc 52 | http://livebeats.com 53 | http://livemedia.in 54 | http://liveu.tv 55 | http://llchemical.com 56 | http://loanlogics.com 57 | http://locamation.com 58 | http://locicontrols.com 59 | http://locomizer.com 60 | http://locusenergy.com 61 | http://lolapanda.com 62 | http://lool.vc 63 | http://lspvc.com 64 | http://lsvp.com 65 | http://lucanepharma.com 66 | http://luceotec.com 67 | http://lumbacurve.com 68 | http://lumesse.com 69 | http://lumicell.com 70 | http://luminus.com 71 | http://lunainc.com 72 | http://luxassure.com 73 | http://luxresearchinc.com 74 | http://luxtera.com 75 | http://luxul.com 76 | http://lycera.com 77 | http://lytixbiopharma.com 78 | http://m-flow-tech.com 79 | http://macton.com 80 | http://mainstay-medical.com 81 | http://makemereach.com 82 | http://makerfaire.com 83 | http://makermedia.com 84 | http://maps.locr.com 85 | http://margan.com 86 | http://margaux-matrix.com 87 | http://markerly.com 88 | http://marketbar.com 89 | http://marketing.rakuten.com 90 | http://marvistech.com 91 | http://mediaradar.com 92 | http://new.abb.com 93 | http://new.chubb.com 94 | http://news.nike.com 95 | http://newsroom.united.com 96 | http://usa.visa.com 97 | http://worldwide.hyundai.com 98 | http://www.21cf.com 99 | http://www.53.com 100 | http://www.Caterpillar.com 101 | http://www.aa.com 102 | http://www.ab-inbev.com 103 | http://www.abbott.com 104 | http://www.abbvie.com 105 | http://www.abertis.com 106 | http://www.abf.co.uk 107 | http://www.abfrl.com 108 | http://www.aboutschwab.com 109 | http://www.accenture.com 110 | http://www.adcb.com 111 | http://www.adecco.com 112 | http://www.adidas-group.com 113 | http://www.adm.com 114 | http://www.airproducts.com 115 | http://www.airtel.in 116 | http://www.ais.co.th 117 | http://www.akzonobel.com 118 | http://www.alcatel-lucent.com 119 | http://www.alcoa.com 120 | http://www.alfransi.com.sa 121 | http://www.allergan.com 122 | http://www.allianz.com 123 | http://www.allstate.com 124 | http://www.alpha.gr 125 | http://www.alstom.com 126 | http://www.altria.com 127 | http://www.amazon.com 128 | http://www.ambac.com 129 | http://www.americamovil.com 130 | http://www.americanexpress.com 131 | http://www.americantower.com 132 | http://www.ameriprise.com 133 | http://www.amerisourcebergen.com 134 | http://www.amgen.com 135 | http://www.amp.com.au 136 | http://www.amtd.com 137 | http://www.anb.com.sa 138 | http://www.angloamerican.com 139 | http://www.annaly.com 140 | http://www.antheminc.com 141 | http://www.antofagasta.co.uk 142 | http://www.aon.com 143 | http://www.apachecorp.com 144 | http://www.apple.com 145 | http://www.appliedmaterials.com 146 | http://www.areva.com 147 | http://www.ashland.com 148 | http://www.asml.com 149 | http://www.assaabloy.com 150 | http://www.assurant.com 151 | http://www.astellas.com 152 | http://www.astrazeneca.com 153 | http://www.asus.com 154 | http://www.atlascopco.com 155 | http://www.att.com 156 | http://www.autozone.com 157 | http://www.aviva.com 158 | http://www.axa.com 159 | http://www.axiata.com 160 | http://www.axisbank.com 161 | http://www.baesystems.com 162 | http://www.bakerhughes.com 163 | http://www.bancsabadell.com 164 | http://www.bankhapoalim.com 165 | http://www.bankia.com 166 | http://www.bankofamerica.com 167 | http://www.bankofbaroda.com 168 | http://www.bankofindia.com 169 | http://www.bankofireland.com 170 | http://www.baosteel.com 171 | http://www.barrick.com 172 | http://www.basf.com 173 | http://www.bat.com 174 | http://www.baxter.com 175 | http://www.bayer.com 176 | http://www.bbt.com 177 | http://www.bbva.com 178 | http://www.bce.ca 179 | http://www.bd.com 180 | http://www.bedbathandbeyond.com 181 | http://www.beiersdorf.com 182 | http://www.bharatpetroleum.in 183 | http://www.bhel.com 184 | http://www.bhpbilliton.com 185 | http://www.bidvest.com 186 | http://www.biogen.com 187 | http://www.blackrock.com 188 | http://www.bmo.com 189 | http://www.bms.com 190 | http://www.bnymellon.com 191 | http://www.boeing.com 192 | http://www.bombardier.com 193 | http://www.borgwarner.com 194 | http://www.ca.com 195 | http://www.canadiantire.ca 196 | http://www.canarabank.com 197 | http://www.capgemini.com 198 | http://www.capitaland.com 199 | http://www.capitalone.com 200 | http://www.cardinalhealth.com 201 | http://www.carlsberg.com 202 | http://www.carmax.com 203 | http://www.carnivalcorp.com 204 | http://www.carrefour.com 205 | http://www.carso.com.mx 206 | http://www.cbrands.com 207 | http://www.cbscorporation.com 208 | http://www.celgene.com 209 | http://www.cemex.com 210 | http://www.cemig.com.br 211 | http://www.cenovus.com 212 | http://www.centerpointenergy.com 213 | http://www.directv.com 214 | http://www.discoverfinancial.com 215 | http://www.dish.com 216 | http://www.dollargeneral.com 217 | http://www.dovercorporation.com 218 | http://www.dow.com 219 | http://www.dpdhl.com 220 | http://www.dpworld.com 221 | http://www.dsm.com 222 | http://www.dupont.com 223 | http://www.eastman.com 224 | http://www.eaton.com 225 | http://www.ebayinc.com 226 | http://www.ecolab.com 227 | http://www.edison.com 228 | http://www.eiffage.fr 229 | http://www.elcompanies.com 230 | http://www.emaar.com 231 | http://www.emc.com 232 | http://www.emdgroup.com 233 | http://www.emerson.com 234 | http://www.emiratesnbd.com 235 | http://www.enbridge.com 236 | http://www.enel.com 237 | http://www.eni.com 238 | http://www.eogresources.com 239 | http://www.eon.com 240 | http://www.ericsson.com 241 | http://www.erstegroup.com 242 | http://www.essilor.com 243 | http://www.etisalat.ae 244 | http://www.everestre.com 245 | http://www.evergrande.com 246 | http://www.evonik.com 247 | http://www.exeloncorp.com 248 | http://www.exor.com 249 | http://www.express-scripts.com 250 | http://www.facebook.com 251 | http://www.fanniemae.com 252 | http://www.fastretailing.co.jp 253 | http://www.fcx.com 254 | http://www.fedex.com 255 | http://www.femsa.com 256 | http://www.fgb.ae 257 | http://www.firstenergycorp.com 258 | http://www.firstrand.co.za 259 | http://www.fisglobal.com 260 | http://www.fluor.com 261 | http://www.fmgl.com.au 262 | http://www.ford.com 263 | http://www.fortum.com 264 | http://www.fosun.com 265 | http://www.franklinresources.com 266 | http://www.freddiemac.com 267 | http://www.fresenius.com 268 | http://www.fujitsu.com 269 | http://www.galaxyentertainment.com 270 | http://www.galpenergia.com 271 | http://www.gapinc.com 272 | http://www.generaldynamics.com 273 | http://www.generali.com 274 | http://www.generalmills.com 275 | http://www.genpt.com 276 | http://www.genting.com 277 | http://www.genworth.com 278 | http://www.gilead.com 279 | http://www.gkn.com 280 | http://www.glencore.com 281 | http://www.gm.com 282 | http://www.gmexico.com 283 | http://www.goodyear.com 284 | http://www.google.com 285 | http://www.gpari.com.br 286 | http://www.grainger.com 287 | http://www.group.skanska.com 288 | http://www.grupobimbo.com 289 | http://www.gsk.com 290 | http://www.haier.com 291 | http://www.halkbank.com.tr 292 | http://www.halliburton.com 293 | http://www.handelsbanken.com 294 | http://www.hanwhacorp.co.kr 295 | http://www.harley-davidson.com 296 | http://www.hcpi.com 297 | http://www.hdfc.com 298 | http://www.hdfcbank.com 299 | http://www.heidelbergcement.com 300 | http://www.henkel.com 301 | http://www.hertz.com 302 | http://www.hess.com 303 | http://www.hiltonworldwide.com 304 | http://www.hindalco.com 305 | http://www.hkbea.com 306 | http://www.hm.com 307 | http://www.holcim.com 308 | http://www.hollyfrontier.com 309 | http://www.hp.com 310 | http://www.hsbc.com 311 | http://www.huntington.com 312 | http://www.huskyenergy.ca 313 | http://www.hxb.com.cn 314 | http://www.hyundai-steel.com 315 | http://www.iag.com.au 316 | http://www.iairgroup.com 317 | http://www.ibm.com 318 | http://www.icicibank.com 319 | http://www.idevio.com 320 | http://www.imperialbrandsplc.com 321 | http://www.inditex.com 322 | http://www.infosys.com 323 | http://www.ing.com 324 | http://www.internationalpaper.com 325 | http://www.invesco.com 326 | http://www.investec.co.uk 327 | http://www.iocl.com 328 | http://www.isuzu.co.jp 329 | http://www.itausa.com.br 330 | http://www.itcportal.com 331 | http://www.itw.com 332 | http://www.jal.com 333 | http://www.jbs.com.br 334 | http://www.jeronimomartins.pt 335 | http://www.jnj.com 336 | http://www.johnsoncontrols.com 337 | http://www.jpmorganchase.com 338 | http://www.kbc.com 339 | http://www.kelloggcompany.com 340 | http://www.kepco.co.kr/eng 341 | http://www.kepcorp.com 342 | http://www.kering.com 343 | http://www.key.com 344 | http://www.kimberly-clark.com 345 | http://www.kindermorgan.com 346 | http://www.kingfisher.com 347 | http://www.kirinholdings.co.jp 348 | http://www.koc.com.tr 349 | http://www.komatsu.com 350 | http://www.kone.com 351 | http://www.kraftheinzcompany.com 352 | http://www.kroger.com 353 | http://www.kyocera.co.jp 354 | http://www.kyuden.co.jp 355 | http://www.l-3com.com 356 | http://www.lafarge.com 357 | http://www.landsecurities.com 358 | http://www.larsentoubro.com 359 | http://www.latamairlinesgroup.net 360 | http://www.legalandgeneral.com 361 | http://www.legrand.com 362 | http://www.lenovo.com 363 | http://www.leucadia.com 364 | http://www.levicept.com 365 | http://www.lfg.com 366 | http://www.lg.com 367 | http://www.lgchem.com 368 | http://www.lgdisplay.com 369 | http://www.liaisonedu.com 370 | http://www.libertyglobal.com 371 | http://www.libertyinteractive.com 372 | http://www.libertymedia.com 373 | http://www.libredigital.com 374 | http://www.licony.org 375 | http://www.lifeimage.com 376 | http://www.lifelinescreening.com 377 | http://www.lifelineventures.com 378 | http://www.lifeshield.com 379 | http://www.lifestylesports.com 380 | http://www.lifung.com 381 | http://www.ligand.com 382 | http://www.lightower.com 383 | http://www.lightsail.com 384 | http://www.lightswitch.com 385 | http://www.lilly.com 386 | http://www.limejump.com 387 | http://www.limeroad.com 388 | http://www.limos.com 389 | http://www.linde.com 390 | http://www.linear.com 391 | http://www.linedata.com 392 | http://www.lintbells.com 393 | http://www.liposonix.com 394 | http://www.liveaction.com 395 | http://www.liveops.com 396 | http://www.liverpoolsciencepark.co.uk 397 | http://www.livescribe.com 398 | http://www.livingproof.com 399 | http://www.livspace.com 400 | http://www.lixil-group.co.jp 401 | http://www.lloydsbankinggroup.com 402 | http://www.locanis.de 403 | http://www.lockheedmartin.com 404 | http://www.loews.com 405 | http://www.logcheck.com 406 | http://www.logicbroker.com 407 | http://www.logicsource.com 408 | http://www.logitech.com/en-us 409 | http://www.logoworks.com 410 | http://www.logpoint.com 411 | http://www.lombardmedical.com 412 | http://www.longridgecap.com 413 | http://www.lonza.com 414 | http://www.loreal.com 415 | http://www.lovehomeswap.com 416 | http://www.lovesac.com 417 | http://www.lovethelook.com 418 | http://www.lowcarbonlight.com 419 | http://www.lowes.com 420 | http://www.lufthansa.com 421 | http://www.lukoil.com 422 | http://www.lumenis.com 423 | http://www.lumeta.com 424 | http://www.lumobodytech.com 425 | http://www.luxottica.it 426 | http://www.lycap.com 427 | http://www.lyfekitchen.com 428 | http://www.lyondellbasell.com 429 | http://www.m-87.com 430 | http://www.m2p-labs.com 431 | http://www.machinima.com 432 | http://www.macquarie.com 433 | http://www.macysinc.com 434 | http://www.made.com 435 | http://www.madefire.com 436 | http://www.madrona.com 437 | http://www.maersk.com 438 | http://www.magna.com 439 | http://www.magnet.com 440 | http://www.magnetic.com 441 | http://www.magnoliaprime.com 442 | http://www.mahindra.com 443 | http://www.mainstreethub.com 444 | http://www.mandalaysportsmedia.com 445 | http://www.mangrove.vc 446 | http://www.manulife.com 447 | http://www.mapfre.com 448 | http://www.mapmyfitness.com 449 | http://www.mapmyindia.com 450 | http://www.marathonoil.com 451 | http://www.marathonpetroleum.com 452 | http://www.marginpoint.com 453 | http://www.marinomed.com 454 | http://www.marinsoftware.com 455 | http://www.marinuspharma.com 456 | http://www.marketaxess.com 457 | http://www.marketshot.com 458 | http://www.marketsoft.dk 459 | http://www.marksandspencer.com 460 | http://www.marriott.com 461 | http://www.marvaomedical.com 462 | http://www.marvell.com 463 | http://www.marxentlabs.com 464 | http://www.masabi.com 465 | http://www.mascoma.com 466 | http://www.mastercard.com 467 | http://www.matthey.com 468 | http://www.maybank.com 469 | http://www.mcdonalds.com 470 | http://www.mckesson.com 471 | http://www.mediatek.com 472 | http://www.mediolanum.com 473 | http://www.medtronic.com 474 | http://www.merck.com 475 | http://www.metlife.com 476 | http://www.metrogroup.de 477 | http://www.mgmresorts.com 478 | http://www.micron.com 479 | http://www.microsoft.com 480 | http://www.midea.com 481 | http://www.mmc.com 482 | http://www.mobily.com.sa 483 | http://www.mondelezinternational.com 484 | http://www.monsanto.com 485 | http://www.morganstanley.com 486 | http://www.mosaicco.com 487 | http://www.motorolasolutions.com 488 | http://www.mtb.com 489 | http://www.mtn.com 490 | http://www.mtr.com.hk 491 | http://www.munichre.de 492 | http://www.murphyoilcorp.com 493 | http://www.mylan.com 494 | http://www.mz.com 495 | http://www.naspers.com 496 | http://www.nationalgrid.com/uk 497 | http://www.natixis.com 498 | http://www.nbc.ca 499 | http://www.nbk.com 500 | http://www.nec.com 501 | http://www.nestle.com 502 | http://www.newmont.com 503 | http://www.nexteraenergy.com 504 | http://www.nextplc.co.uk 505 | http://www.nielsen.com 506 | http://www.nisource.com 507 | http://www.nobleenergyinc.com 508 | http://www.nomura.com 509 | http://www.nordea.com 510 | http://www.nornik.ru 511 | http://www.northerntrust.com 512 | http://www.northropgrumman.com 513 | http://www.nov.com 514 | http://www.novartis.com 515 | http://www.novonordisk.com 516 | http://www.nrg.com 517 | http://www.nscorp.com 518 | http://www.nssmc.com 519 | http://www.nucor.com 520 | http://www.nwd.com.hk 521 | http://www.ocbc.com 522 | http://www.oldmutualplc.com 523 | http://www.omnicomgroup.com 524 | http://www.omv.com 525 | http://www.oneok.com 526 | http://www.onex.com/Home.aspx 527 | http://www.ongcindia.com 528 | http://www.oracle.com 529 | http://www.orange.com 530 | http://www.oreillyauto.com 531 | http://www.originenergy.com.au 532 | http://www.oxy.com 533 | http://www.paccar.com 534 | http://www.panasonic.net 535 | http://www.parker.com 536 | http://www.pbebank.com 537 | http://www.pearson.com 538 | http://www.pentair.com 539 | http://www.pepsico.com 540 | http://www.pfizer.com 541 | http://www.pg.com 542 | http://www.pgecorp.com 543 | http://www.pgnig.pl 544 | http://www.philips.com 545 | http://www.phillips66.com 546 | http://www.piraeusbank.gr 547 | http://www.pmi.com 548 | http://www.pnbindia.in 549 | http://www.pnc.com 550 | http://www.pohjola.com 551 | http://www.posco.com 552 | http://www.potashcorp.com 553 | http://www.powerassets.com 554 | http://www.powercorporation.com 555 | http://www.powergridindia.com 556 | http://www.pplweb.com 557 | http://www.praxair.com 558 | http://www.precast.com 559 | http://www.pricelinegroup.com 560 | http://www.principal.com 561 | http://www.progressive.com 562 | http://www.prudential.co.uk 563 | http://www.prudential.com 564 | http://www.pseg.com 565 | http://www.publicisgroupe.com 566 | http://www.publicstorage.com 567 | http://www.qnb.com 568 | http://www.qualcomm.com 569 | http://www.ralphlauren.com 570 | http://www.raytheon.com 571 | http://www.rb.com 572 | http://www.rbc.com 573 | http://www.rbinternational.com 574 | http://www.rbs.com 575 | http://www.rclcorporate.com 576 | http://www.regions.com 577 | http://www.relx.com 578 | http://www.repsol.com 579 | http://www.reynoldsamerican.com 580 | http://www.rgare.com 581 | http://www.richemont.com 582 | http://www.ril.com 583 | http://www.riotinto.com 584 | http://www.roche.com 585 | http://www.rockwellautomation.com 586 | http://www.rogers.com 587 | http://www.rolls-royce.com 588 | http://www.rossstores.com 589 | http://www.rostelecom.ru 590 | http://www.rsagroup.com 591 | http://www.rtl-group.com 592 | http://www.rwe.com 593 | http://www.ryanair.com 594 | http://www.sabic.com 595 | http://www.safran-group.com 596 | http://www.saicmotor.com 597 | http://www.salliemae.com 598 | http://www.sampo.com 599 | http://www.samsungcnt.co.kr 600 | http://www.sandisk.com 601 | http://www.sands.com 602 | http://www.sandvik.com 603 | http://www.sanmiguel.com.ph 604 | http://www.sanofi.com 605 | http://www.sap.com 606 | http://www.sasol.com 607 | http://www.sberbank.ru 608 | http://www.sbi.co.in 609 | http://www.sc.com 610 | http://www.schindler.com 611 | http://www.schneider-electric.com 612 | http://www.schroders.com 613 | http://www.scor.com 614 | http://www.scotiabank.com 615 | http://www.seadrill.com 616 | http://www.seagate.com 617 | http://www.sebgroup.com 618 | http://www.sei.co.jp 619 | http://www.sempra.com 620 | http://www.sgs.com 621 | http://www.shell.com 622 | http://www.sherwin-williams.com 623 | http://www.shi.samsung.co.kr 624 | http://www.shimaoproperty.com 625 | http://www.shinetsu.co.jp 626 | http://www.shire.com 627 | http://www.shkp.com 628 | http://www.simedarby.com 629 | http://www.simon.com 630 | http://www.singaporeair.com 631 | http://www.singtel.com 632 | http://www.sinopharmholding.com 633 | http://www.sjmholdings.com 634 | http://www.sk.co.kr 635 | http://www.sky.com 636 | http://www.slb.com 637 | http://www.sminvestments.com 638 | http://www.socgen.com 639 | http://www.sodexo.com 640 | http://www.solvay.com 641 | http://www.sony.net 642 | http://www.southerncompany.com 643 | http://www.southwest.com 644 | http://www.spectraenergy.com 645 | http://www.spermcomet.com 646 | http://www.sse.com 647 | http://www.standardbank.com 648 | http://www.standardlife.com 649 | http://www.stanleyblackanddecker.com 650 | http://www.staples.com 651 | http://www.starbucks.com 652 | http://www.statestreet.com 653 | http://www.statoil.com 654 | http://www.steinhoffinternational.com 655 | http://www.stryker.com 656 | http://www.sumitomo-chem.co.jp 657 | http://www.sumitomo-rd.co.jp 658 | http://www.sunartretail.com 659 | http://www.suncor.com 660 | http://www.suncorpgroup.com.au 661 | http://www.sunlife.com 662 | http://www.suntrust.com 663 | http://www.swatchgroup.com 664 | http://www.swirepacific.com 665 | http://www.swissre.com 666 | http://www.symantec.com 667 | http://www.syngenta.com 668 | http://www.takeda.us 669 | http://www.target.com 670 | http://www.tatamotors.com 671 | http://www.tatneft.ru 672 | http://www.tcs.com 673 | http://www.td.com 674 | http://www.te.com 675 | http://www.technip.com 676 | http://www.teck.com 677 | http://www.telecomitalia.com 678 | http://www.telekom.com 679 | http://www.telenor.com 680 | http://www.teliacompany.com 681 | http://www.telstra.com.au 682 | http://www.telus.com 683 | http://www.tenaris.com 684 | http://www.terna.it 685 | http://www.tescoplc.com 686 | http://www.tevapharm.com 687 | http://www.textron.com 688 | http://www.thalesgroup.com 689 | http://www.thehartford.com 690 | http://www.thehersheycompany.com 691 | http://www.theice.com 692 | http://www.thephoenixgroup.com 693 | http://www.thereddoor.com 694 | http://www.thermofisher.com 695 | http://www.thewaltdisneycompany.com 696 | http://www.thisisnoble.com 697 | http://www.thomsonreuters.com 698 | http://www.thyssenkrupp.com 699 | http://www.ti.com 700 | http://www.timewarner.com 701 | http://www.timewarnercable.com 702 | http://www.tnb.com.my 703 | http://www.toshiba.co.jp 704 | http://www.total.com 705 | http://www.toyota-tsusho.com 706 | http://www.transcanada.com 707 | http://www.travelers.com 708 | http://www.tsmc.com 709 | http://www.tyco.com 710 | http://www.tyson.com 711 | http://www.ubs.com 712 | http://www.unibail-rodamco.com 713 | http://www.unicreditgroup.eu 714 | http://www.unilever.com 715 | http://www.unitedhealthgroup.com 716 | http://www.unum.com 717 | http://www.uob.com.sg 718 | http://www.up.com 719 | http://www.upm.com 720 | http://www.ups.com 721 | http://www.uralkali.com 722 | http://www.usbank.com 723 | http://www.utc.com 724 | http://www.vakifbank.com.tr 725 | http://www.vale.com 726 | http://www.valeant.com 727 | http://www.valeo.com 728 | http://www.valero.com 729 | http://www.ventasreit.com 730 | http://www.verizon.com 731 | http://www.vfc.com 732 | http://www.viacom.com 733 | http://www.vig.com 734 | http://www.viglink.com 735 | http://www.vimpelcom.com 736 | http://www.vinci.com 737 | http://www.vmware.com 738 | http://www.vodafone.com 739 | http://www.voestalpine.com 740 | http://www.volvogroup.com 741 | http://www.walgreens.com 742 | http://www.wdc.com 743 | http://www.weatherford.com 744 | http://www.wesfarmers.com.au 745 | http://www.westfield.com 746 | http://www.westjr.co.jp 747 | http://www.weston.ca 748 | http://www.westpac.com.au 749 | http://www.weyerhaeuser.com 750 | http://www.wheelockcompany.com 751 | http://www.whirlpoolcorp.com 752 | http://www.wholefoodsmarket.com 753 | http://www.wilmar-international.com 754 | http://www.wipro.com 755 | http://www.wm.com 756 | http://www.wolseley.com 757 | http://www.woodside.com.au 758 | http://www.woolworthsgroup.com.au 759 | http://www.wpp.com 760 | http://www.wynnresorts.com 761 | http://www.xcelenergy.com 762 | http://www.xerox.com 763 | http://www.xlgroup.com 764 | http://www.yahoo.com 765 | http://www.yara.com 766 | http://www.yum.com 767 | https://fugue.co 768 | https://home.kuehne-nagel.com 769 | https://kaptivo.com 770 | https://kibocommerce.com 771 | https://lexity.com 772 | https://light.co 773 | https://limk.com 774 | https://lineagen.com 775 | https://lingotek.com 776 | https://lingvist.com 777 | https://liquavista.com 778 | https://liquid-state.com 779 | https://liquidspace.com 780 | https://liveintent.com 781 | https://livelovely.com 782 | https://liveramp.com 783 | https://lob.com 784 | https://locality.com 785 | https://localmotors.com 786 | https://lockitron.com 787 | https://locomobi.com 788 | https://locu.com 789 | https://loews.com 790 | https://logentries.com 791 | https://loopup.com 792 | https://lover.ly 793 | https://lovespace.co.uk 794 | https://lovewithfood.com 795 | https://lowercasecapital.com 796 | https://lumension.com 797 | https://lunarline.com 798 | https://luxurygaragesale.com 799 | https://magoosh.com 800 | https://mailchimp.com 801 | https://maillift.com 802 | https://mailstrom.co 803 | https://mapr.com 804 | https://mariadb.com 805 | https://markforged.com 806 | https://marvelapp.com 807 | https://networks.nokia.com 808 | https://secure.logmein.com 809 | https://viromer-transfection.com 810 | https://www.aabacosmallbusiness.com 811 | https://www.aholddelhaize.com 812 | https://www.anz.com.au 813 | https://www.beyondtrust.com 814 | https://www.bmwgroup.com 815 | https://www.brf-global.com 816 | https://www.ccep.com 817 | https://www.davita.com 818 | https://www.drift.com 819 | https://www.editoreye.com 820 | https://www.fireeye.com 821 | https://www.goldmansachs.com 822 | https://www.hidglobal.com 823 | https://www.home.barclays 824 | https://www.investorab.com 825 | https://www.leaptx.com 826 | https://www.lexisnexis.com 827 | https://www.lexshares.com 828 | https://www.liaison.com 829 | https://www.life360.com 830 | https://www.lifecake.com 831 | https://www.lifelock.com 832 | https://www.lifesize.com 833 | https://www.liftigniter.com 834 | https://www.liftopia.com 835 | https://www.lifx.com 836 | https://www.lightercapital.com 837 | https://www.lightspeedhq.com 838 | https://www.lilly.com 839 | https://www.limelight.com 840 | https://www.linkdex.com 841 | https://www.linkedin.com 842 | https://www.lishfood.com 843 | https://www.listia.com 844 | https://www.lithium.com 845 | https://www.littlepassports.com 846 | https://www.littlepim.com 847 | https://www.localytics.com 848 | https://www.locationlabs.com 849 | https://www.loggly.com 850 | https://www.lotame.com 851 | https://www.lumasenseinc.com 852 | https://www.lumejet.com 853 | https://www.lumenradio.com 854 | https://www.lyft.com 855 | https://www.lynda.com 856 | https://www.lyst.com 857 | https://www.maana.io 858 | https://www.mabaya.com 859 | https://www.macrogenics.com 860 | https://www.macrolide.com 861 | https://www.madison-reed.com 862 | https://www.maestroqa.com 863 | https://www.magisto.com 864 | https://www.magmaglobal.com 865 | https://www.mailjet.com 866 | https://www.makewonder.com 867 | https://www.makr.co 868 | https://www.managedbyq.com 869 | https://www.mangahigh.com 870 | https://www.mangohealth.com 871 | https://www.mapbox.com 872 | https://www.mapd.com 873 | https://www.mapillary.com 874 | https://www.mark43.com 875 | https://www.marketfactory.com 876 | https://www.marketo.com 877 | https://www.markmonitor.com 878 | https://www.masergy.com 879 | https://www.mashape.com 880 | https://www.masher.com 881 | https://www.mashery.com 882 | https://www.metrixlab.com 883 | https://www.nab.com.au 884 | https://www.nbad.com 885 | https://www.neste.com 886 | https://www.openshift.com 887 | https://www.pernod-ricard.com 888 | https://www.sanlam.co.za 889 | https://www.solarwindsmsp.com 890 | https://www.sovrn.com 891 | https://www.spglobal.com 892 | https://www.swisscom.ch 893 | https://www.synopsys.com 894 | https://www.unionstation.com 895 | https://www.virtualinstruments.com 896 | https://www.wellsfargo.com 897 | https://www.westrock.com 898 | https://www.zurich.com 899 | https://www2.chubb.com 900 | https://www2.deloitte.com 901 | kghm.com 902 | lever.co 903 | levinebuilders.com 904 | levoss.com 905 | lexmachina.com 906 | liazon.com 907 | licensestream.com 908 | loginradius.com 909 | logtrust.com 910 | lollywollydoodle.com 911 | lookout.com 912 | lot18.com 913 | lucidchart.com 914 | lucidworks.com 915 | ludei.com 916 | lumafit.com 917 | lumosity.com 918 | makezine.com 919 | maritzcx.com 920 | markavip.com 921 | marksanspharma.com 922 | marronebioinnovations.com 923 | www.centrica.com 924 | www.centurylink.com 925 | www.cfindustries.com 926 | www.cgi.com 927 | www.chalco.com.cn 928 | www.chevron.com 929 | www.chinamobileltd.com 930 | www.chinatelecom-h.com 931 | www.chinaunicom.com.hk 932 | www.chk.com 933 | www.chowtaifook.com 934 | www.cibc.com 935 | www.cigna.com 936 | www.cimb.com 937 | www.cisco.com 938 | www.cit.com 939 | www.citic.com 940 | www.citigroup.com 941 | www.ckh.com.hk 942 | www.clpgroup.com 943 | www.clr.com 944 | www.cmegroup.com 945 | www.cn.ca 946 | www.cnoocltd.com 947 | www.cnrl.com 948 | www.coca-colacompany.com 949 | www.cognizant.com 950 | www.colgate.com 951 | www.commbank.com.au 952 | www.commerzbank.com 953 | www.commscope.com 954 | www.compass-group.com 955 | www.conagrabrands.com 956 | www.conocophillips.com 957 | www.conti-online.com 958 | www.corning.com 959 | www.corp.megafon.ru 960 | www.costco.com 961 | www.covidien.com 962 | www.cpr.ca 963 | www.cr-power.com 964 | www.credicorpnet.com 965 | www.credit-suisse.com 966 | www.crh.com 967 | www.crland.com.hk 968 | www.csc.com 969 | www.csc.com.tw 970 | www.csec.com 971 | www.csl.com.au 972 | www.csx.com 973 | www.ctbcholding.com 974 | www.cummins.com 975 | www.cvshealth.com 976 | www.daimler.com 977 | www.danaher.com 978 | www.dangcem.com 979 | www.danone.com 980 | www.danskebank.com 981 | www.dbs.com.sg 982 | www.deepwater.com 983 | www.deere.com 984 | www.delta.com 985 | www.dexia.com 986 | www.dfmg.com.cn 987 | www.diageo.com 988 | www.dior-finance.com 989 | www.liveathos.com 990 | www.liveperson.com 991 | www.livestories.com 992 | www.livhome.com 993 | -------------------------------------------------------------------------------- /test/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ${LOGGER_TARGET:-System.out} 5 | 6 | %date{ISO8601} [%t] %-5p %c{1} - %m%n 7 | 8 | 9 | 10 | 11 | 12 | 13 | --------------------------------------------------------------------------------