Return-Path: X-Original-To: apmail-clerezza-commits-archive@www.apache.org Delivered-To: apmail-clerezza-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 37CED173DC for ; Sat, 13 Jun 2015 11:03:27 +0000 (UTC) Received: (qmail 30283 invoked by uid 500); 13 Jun 2015 11:03:27 -0000 Delivered-To: apmail-clerezza-commits-archive@clerezza.apache.org Received: (qmail 30258 invoked by uid 500); 13 Jun 2015 11:03:27 -0000 Mailing-List: contact commits-help@clerezza.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@clerezza.apache.org Delivered-To: mailing list commits@clerezza.apache.org Received: (qmail 30215 invoked by uid 99); 13 Jun 2015 11:03:27 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 13 Jun 2015 11:03:27 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id D5828DF989; Sat, 13 Jun 2015 11:03:26 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: reto@apache.org To: commits@clerezza.apache.org Date: Sat, 13 Jun 2015 11:03:27 -0000 Message-Id: <06fbb20c14cd48e3ac6ec987c1227f9c@git.apache.org> In-Reply-To: <5239716dcb584ce4a5a399ee9638f596@git.apache.org> References: <5239716dcb584ce4a5a399ee9638f596@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [2/2] clerezza git commit: CLEREZZA-994: created integration tests against the content launcher CLEREZZA-994: created integration tests against the content launcher Project: http://git-wip-us.apache.org/repos/asf/clerezza/repo Commit: http://git-wip-us.apache.org/repos/asf/clerezza/commit/e734ab8a Tree: http://git-wip-us.apache.org/repos/asf/clerezza/tree/e734ab8a Diff: http://git-wip-us.apache.org/repos/asf/clerezza/diff/e734ab8a Branch: refs/heads/master Commit: e734ab8a593d9cdb936ea2faa16492ddb93ca295 Parents: 3495b27 Author: Reto Gmuer Authored: Sat Jun 13 11:03:14 2015 +0000 Committer: Reto Gmuer Committed: Sat Jun 13 11:03:14 2015 +0000 ---------------------------------------------------------------------- provisioning/launchers/content-launcher/pom.xml | 2 +- .../tests/content-launcher-tests/pom.xml | 195 ++++++++++++++++ .../integration/tests/AdminGraphsTest.java | 44 ++++ .../clerezza/integration/tests/BaseTest.java | 222 +++++++++++++++++++ .../integration/tests/UploadAndAccessTest.java | 94 ++++++++ .../tests/UploadAndAccessWithRdfJsonTest.java | 28 +++ provisioning/rdf/pom.xml | 13 +- report.xml | 35 --- 8 files changed, 590 insertions(+), 43 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/clerezza/blob/e734ab8a/provisioning/launchers/content-launcher/pom.xml ---------------------------------------------------------------------- diff --git a/provisioning/launchers/content-launcher/pom.xml b/provisioning/launchers/content-launcher/pom.xml index 831386d..3590b9e 100644 --- a/provisioning/launchers/content-launcher/pom.xml +++ b/provisioning/launchers/content-launcher/pom.xml @@ -230,7 +230,7 @@ org.apache.clerezza.provisioning rdf - 1.0.0 + 1.0.1-SNAPSHOT partialbundlelist http://git-wip-us.apache.org/repos/asf/clerezza/blob/e734ab8a/provisioning/launchers/tests/content-launcher-tests/pom.xml ---------------------------------------------------------------------- diff --git a/provisioning/launchers/tests/content-launcher-tests/pom.xml b/provisioning/launchers/tests/content-launcher-tests/pom.xml new file mode 100644 index 0000000..a4a4039 --- /dev/null +++ b/provisioning/launchers/tests/content-launcher-tests/pom.xml @@ -0,0 +1,195 @@ + + + + 4.0.0 + + + org.apache.clerezza + clerezza + 7 + ../../../../parent + + + org.apache.clerezza.provisioning.tests + content-launcher-tests + 1.0.0-SNAPSHOT + jar + + Clerezza - Provisioning - Launchers - Tests - Content Launcher Tests + + + + + + + + + + + + -Xmx1g -XX:MaxPermSize=256m -Dorg.apache.stanbol.offline.mode=true + + + false + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.10 + + + copy-runnable-jar + + copy-dependencies + + process-resources + + content-launcher + true + false + false + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.9.1 + + + reserve-server-port + + reserve-network-port + + process-resources + + + http.port + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.18.1 + + + ${test.server.url} + ${http.port} + ${jar.executor.vm.options} + ${project.basedir}/target/dependency + .*launcher.*\.jar$ + ${project.build.directory}/launchdir + ${keepJarRunning} + 240 + /:Clerezza:Accept:text/html + /system/console/bundles:!Starting:Accept:text/html + + + + + + + + + org.apache.clerezza.provisioning + content-launcher + 1.0.1-SNAPSHOT + + + * + * + + + provided + + + junit + junit + test + + + org.apache.httpcomponents + httpclient + 4.3.5 + test + + + com.jayway.restassured + rest-assured + 2.3.1 + test + + + org.apache.stanbol + org.apache.stanbol.commons.testing.jarexec + 1.0.0-SNAPSHOT + test + + + org.apache.clerezza + rdf.core + 1.0.0 + test + + + org.apache.clerezza + rdf.utils + 1.0.0 + test + + + org.apache.clerezza + rdf.jena.parser + 1.0.0 + runtime + + + org.apache.clerezza + rdf.jena.serializer + 1.0.0 + runtime + + + org.apache.clerezza + rdf.rdfjson + 1.0.1-SNAPSHOT + runtime + + + org.slf4j + slf4j-jdk14 + runtime + + + org.apache.clerezza + platform + 1.0.0 + test + + + + http://git-wip-us.apache.org/repos/asf/clerezza/blob/e734ab8a/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/AdminGraphsTest.java ---------------------------------------------------------------------- diff --git a/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/AdminGraphsTest.java b/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/AdminGraphsTest.java new file mode 100644 index 0000000..eec3163 --- /dev/null +++ b/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/AdminGraphsTest.java @@ -0,0 +1,44 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.clerezza.integration.tests; + +import com.jayway.restassured.RestAssured; +import com.jayway.restassured.response.Response; +import org.apache.clerezza.platform.Constants; +import org.apache.http.HttpStatus; +import static org.hamcrest.Matchers.*; +import org.junit.Test; + +/** + * + * @author reto + */ +public class AdminGraphsTest extends BaseTest { + + + @Test + public void htmlVersion() { + Response response = RestAssured.given().header("Accept", "text/html") + .auth().basic("admin", "admin") + .expect().statusCode(HttpStatus.SC_OK).when() + .get("/admin/graphs"); + response.then().assertThat().body(containsString(Constants.CONTENT_GRAPH_URI_STRING)); + } + + + +} http://git-wip-us.apache.org/repos/asf/clerezza/blob/e734ab8a/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/BaseTest.java ---------------------------------------------------------------------- diff --git a/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/BaseTest.java b/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/BaseTest.java new file mode 100644 index 0000000..ae3e4d1 --- /dev/null +++ b/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/BaseTest.java @@ -0,0 +1,222 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.clerezza.integration.tests; + +import com.jayway.restassured.RestAssured; +import java.io.File; +import java.net.ConnectException; +import java.util.ArrayList; +import java.util.List; +import java.util.TreeSet; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; +import org.apache.stanbol.commons.testing.jarexec.JarExecutor; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author reto + */ + +public abstract class BaseTest { + + public static final String TEST_SERVER_URL_PROP = "test.server.url"; + public static final String SERVER_READY_TIMEOUT_PROP = "server.ready.timeout.seconds"; + public static final String SERVER_READY_PROP_PREFIX = "server.ready.path"; + public static final String KEEP_JAR_RUNNING_PROP = "keepJarRunning"; + + protected static String serverBaseUrl; + + private static final Logger log = LoggerFactory.getLogger(BaseTest.class); + + private static void delete(File file) { + if (file.isDirectory()) { + for (File child: file.listFiles()) { + delete(child); + } + } + file.delete(); + } + + protected boolean serverReady = false; + //protected RequestBuilder builder; + protected DefaultHttpClient httpClient = new DefaultHttpClient(); + //protected RequestExecutor executor = new RequestExecutor(httpClient); + + @BeforeClass + public static synchronized void startRunnableJar() throws Exception { + if (serverBaseUrl != null) { + // concurrent initialization by loading subclasses + return; + } + final String configuredUrl = System.getProperty(TEST_SERVER_URL_PROP); + if ((configuredUrl != null) && !configuredUrl.isEmpty()) { + serverBaseUrl = configuredUrl; + log.info(TEST_SERVER_URL_PROP + " is set: not starting server jar (" + serverBaseUrl + ")"); + } else { + final File workingDir = new File(System.getProperty(JarExecutor.PROP_WORKING_DIRECTORY)); + if (workingDir.exists()) { + delete(workingDir); + } + final JarExecutor j = JarExecutor.getInstance(System.getProperties()); + j.start(); + serverBaseUrl = "http://localhost:" + j.getServerPort(); + log.info("Forked subprocess server listening to: " + serverBaseUrl); + + + } + RestAssured.baseURI = serverBaseUrl; + } + + @AfterClass + public static void afterClass() { + // Optionally block here so that the runnable jar stays up - we can + // then run tests against it from another VM + if ("true".equals(System.getProperty(KEEP_JAR_RUNNING_PROP))) { + log.info(KEEP_JAR_RUNNING_PROP + " set to true - entering infinite loop" + + " so that runnable jar stays up. Kill this process to exit."); + while (true) { + try { + Thread.sleep(1000L); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + } + } + } + } + + @Before + public void waitForServerReady() throws Exception { + log.debug("> before {}#waitForServerReady()",getClass().getSimpleName()); + if (serverReady) { + log.debug(" ... server already marked as ready!"); + return; + } + + // Timeout for readiness test + final String sec = System.getProperty(SERVER_READY_TIMEOUT_PROP); + final int timeoutSec = sec == null ? 60 : Integer.valueOf(sec); + log.info("Will wait up to " + timeoutSec + " seconds for server to become ready"); + final long endTime = System.currentTimeMillis() + timeoutSec * 1000L; + + // Get the list of paths to test and expected content regexps + final List testPaths = new ArrayList(); + final TreeSet propertyNames = new TreeSet(); + propertyNames.addAll(System.getProperties().keySet()); + for (Object o : propertyNames) { + final String key = (String) o; + if (key.startsWith(SERVER_READY_PROP_PREFIX)) { + testPaths.add(System.getProperty(key)); + } + } + + // Consider the server ready if it responds to a GET on each of + // our configured request paths with a 200 result and content + // that matches the regexp supplied with the path + long sleepTime = 100; + readyLoop: + while (!serverReady && System.currentTimeMillis() < endTime) { + // Wait a bit between checks, to let the server come up + Thread.sleep(sleepTime); + sleepTime = Math.min(5000L, sleepTime * 2); + + // A test path is in the form path:substring or just path, in which case + // we don't check that the content contains the substring + log.debug(" - check serverReady Paths"); + for (String p : testPaths) { + log.debug(" > path: {}", p); + final String[] s = p.split(":"); + final String path = s[0]; + final String substring = (s.length > 0 ? s[1] : null); + final String url = serverBaseUrl + path; + log.debug(" > url: {}", url); + log.debug(" > content: {}", substring); + final HttpGet get = new HttpGet(url); + //authenticate as admin with password admin + get.setHeader("Authorization", "Basic YWRtaW46YWRtaW4="); + for(int i = 2; i+1 header: {}:{}", s[i], s[i+1]); + if(s[i] != null && !s[i].isEmpty() && + s[i+1] != null && !s[i+1].isEmpty()){ + get.setHeader(s[i], s[i+1]); + } + } + HttpEntity entity = null; + try { + log.debug(" > execute: {}", get); + HttpResponse response = httpClient.execute(get); + log.debug(" > response: {}", response); + entity = response.getEntity(); + final int status = response.getStatusLine().getStatusCode(); + if (status != 200) { + log.info("Got {} at {} - will retry", status, url); + continue readyLoop; + } else { + log.debug("Got {} at {} - will retry", status, url); + } + + if (substring != null) { + if (entity == null) { + log.info("No entity returned for {} - will retry", url); + continue readyLoop; + } + final String content = EntityUtils.toString(entity); + final boolean checkAbsence = substring.startsWith("!"); + final String notPresentString = substring.substring(1); + if ((!checkAbsence && content.contains(substring)) || + (checkAbsence && content.contains(notPresentString))) { + log.debug("Returned content for {} contains {} - ready", + url, substring); + } else { + log.info("Returned content for {} does not contain " + + "{} - will retry", url, substring); + continue readyLoop; + + } + } + } catch (ConnectException e) { + log.info("Got {} at {} - will retry", e.getClass().getSimpleName(), url); + continue readyLoop; + } finally { + if (entity != null) { + entity.consumeContent(); + } + } + } + log.info("Got expected content for all configured requests, server is ready"); + //Some additional wait time, as not everything can be tested with the paths + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + serverReady = true; + } + + if (!serverReady) { + throw new Exception("Server not ready after " + timeoutSec + " seconds"); + } + } + +} http://git-wip-us.apache.org/repos/asf/clerezza/blob/e734ab8a/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/UploadAndAccessTest.java ---------------------------------------------------------------------- diff --git a/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/UploadAndAccessTest.java b/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/UploadAndAccessTest.java new file mode 100644 index 0000000..1470c74 --- /dev/null +++ b/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/UploadAndAccessTest.java @@ -0,0 +1,94 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.clerezza.integration.tests; + +import com.jayway.restassured.RestAssured; +import com.jayway.restassured.response.Response; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import org.apache.clerezza.commons.rdf.ImmutableGraph; +import org.apache.clerezza.platform.Constants; +import org.apache.clerezza.rdf.core.serializedform.Parser; +import org.apache.clerezza.rdf.core.serializedform.Serializer; +import org.apache.http.HttpHeaders; +import org.apache.http.HttpStatus; +import static org.hamcrest.Matchers.containsString; +import org.junit.Assert; +import org.junit.Test; + +/** + * + * @author reto + */ +public class UploadAndAccessTest extends BaseTest { + + String smallGraphTurtle = null; + ImmutableGraph smallGraph; + + protected String getRdfFormat() { + return "text/turtle"; + + } + + @Test + public void uploadAndQuery() throws Exception { + smallGraphTurtle = "<"+RestAssured.baseURI+"/test-resource> \"A test resource\"."; + smallGraph = Parser.getInstance().parse(new ByteArrayInputStream(smallGraphTurtle.getBytes("utf-8")), "text/turtle"); + uploadTurtle(); + sparqlAsk(); + dereferenceResource(); + } + + protected void uploadTurtle() { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + Serializer.getInstance().serialize(baos, smallGraph, getRdfFormat()); + RestAssured.given().header("Accept", "text/html") + .auth().basic("admin", "admin") + .formParam("name", Constants.CONTENT_GRAPH_URI_STRING) + .multiPart("graph", "test.ttl", baos.toByteArray(), getRdfFormat()) + .formParam("append", "Append") + .expect().statusCode(HttpStatus.SC_NO_CONTENT).when() + .post("/graph"); + } + + + protected void sparqlAsk() { + final String sparqlQuery = "ASK {"+smallGraphTurtle+"}"; + Response response = RestAssured.given().header("Accept", "application/sparql-results+xml") + .auth().basic("admin", "admin") + .formParam("query", sparqlQuery) + .formParam("default-graph-uri", Constants.CONTENT_GRAPH_URI_STRING) + .expect() + .statusCode(HttpStatus.SC_OK) + .header(HttpHeaders.CONTENT_TYPE, "application/sparql-results+xml") + .when() + .post("/sparql"); + response.then().assertThat().body(containsString("true")); + } + + protected void dereferenceResource() { + Response response = RestAssured.given().header("Accept", getRdfFormat()) + .expect() + .statusCode(HttpStatus.SC_OK) + .header(HttpHeaders.CONTENT_TYPE, getRdfFormat()) + .when() + .get("/test-resource"); + ImmutableGraph returnedGraph = Parser.getInstance().parse(response.getBody().asInputStream(), getRdfFormat()); + Assert.assertEquals("Returned Graph has wrong size", 1, returnedGraph.size()); + Assert.assertEquals(smallGraph, returnedGraph); + } + +} http://git-wip-us.apache.org/repos/asf/clerezza/blob/e734ab8a/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/UploadAndAccessWithRdfJsonTest.java ---------------------------------------------------------------------- diff --git a/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/UploadAndAccessWithRdfJsonTest.java b/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/UploadAndAccessWithRdfJsonTest.java new file mode 100644 index 0000000..c9dd7e7 --- /dev/null +++ b/provisioning/launchers/tests/content-launcher-tests/src/test/java/org/apache/clerezza/integration/tests/UploadAndAccessWithRdfJsonTest.java @@ -0,0 +1,28 @@ +/* + * Copyright 2015 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.clerezza.integration.tests; + +/** + * + * @author reto + */ +public class UploadAndAccessWithRdfJsonTest extends UploadAndAccessTest { + @Override + protected String getRdfFormat() { + return "application/rdf+json"; + } + +} http://git-wip-us.apache.org/repos/asf/clerezza/blob/e734ab8a/provisioning/rdf/pom.xml ---------------------------------------------------------------------- diff --git a/provisioning/rdf/pom.xml b/provisioning/rdf/pom.xml index d5c0580..08a20a6 100644 --- a/provisioning/rdf/pom.xml +++ b/provisioning/rdf/pom.xml @@ -132,16 +132,15 @@ 1.0.0-SNAPSHOT --> - + com.googlecode.json-simple + json-simple + org.apache.clerezza rdf.jena.serializer @@ -155,7 +154,7 @@ org.apache.clerezza rdf.jena.sparql - 1.0.0 + 1.0.1-SNAPSHOT org.apache.clerezza http://git-wip-us.apache.org/repos/asf/clerezza/blob/e734ab8a/report.xml ---------------------------------------------------------------------- diff --git a/report.xml b/report.xml deleted file mode 100644 index 9b0d503..0000000 --- a/report.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - Feature Extraction - - - TCPFLOW - 1.4.4 - - 4.8.2 (4.8.2 20140110 (prerelease) [ibm/gcc-4_8-branch merged from gcc-4_8-branch, revision 205847]) - -pthread -I/usr/local/include -D_FORTIFY_SOURCE=2 -DUTC_OFFSET=+0000 - -g -pthread -g -O3 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -MD -D_FORTIFY_SOURCE=2 -Wpointer-arith -Wmissing-declarations -Wmissing-prototypes -Wshadow -Wwrite-strings -Wcast-align -Waggregate-return -Wbad-function-cast -Wcast-qual -Wundef -Wredundant-decls -Wdisabled-optimization -Wfloat-equal -Wmultichar -Wc++-compat -Wmissing-noreturn -Wall -Wstrict-prototypes - -g -pthread -g -O3 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -std=c++11 -Wall -MD -D_FORTIFY_SOURCE=2 -Wpointer-arith -Wshadow -Wwrite-strings -Wcast-align -Wredundant-decls -Wdisabled-optimization -Wfloat-equal -Wmultichar -Wmissing-noreturn -Woverloaded-virtual -Wsign-promo -funit-at-a-time -Wstrict-null-sentinel -Weffc++ - -L/usr/local/lib -Wl,-Bsymbolic-functions -Wl,-z,relro - -lpcap -lcairo -lfontconfig -lfreetype -lpixman-1 -lexpat -lssl -lcrypto -lz -lssl -lcrypto - 2014-01-13T17:14:40 - - - - Linux - 3.13.0-52-generic - #86-Ubuntu SMP Mon May 4 04:32:59 UTC 2015 - 5033e1dfa905 - x86_64 - tcpflow -c port 8080 -i lo - 0 - 2015-05-18T11:19:57Z - - - - - 0