Jacoco coverage support for bazel

Change-Id: Ic94304aa6fed0e18f16cecfdda388d421064d0b6
diff --git a/tools/build/bazel/deps_files.bzl b/tools/build/bazel/deps_files.bzl
new file mode 100644
index 0000000..24c65ca
--- /dev/null
+++ b/tools/build/bazel/deps_files.bzl
@@ -0,0 +1,25 @@
+def _impl(ctx):
+    output = ctx.outputs.deps_files
+
+    dep_list = []
+    for dep in ctx.files.deps:
+        dep_list += [dep.path]
+
+    cmd = [
+        "echo %s >>  %s" % (",".join(dep_list), output.path),
+    ]
+
+    ctx.action(
+        inputs = ctx.files.deps,
+        outputs = [output],
+        progress_message = "Generating deps file paths for %s" % ctx.attr.name,
+        command = ";\n".join(cmd),
+    )
+
+deps_files = rule(
+    attrs = {
+        "deps": attr.label_list(allow_files = True),
+    },
+    implementation = _impl,
+    outputs = {"deps_files": "%{name}-deps-files.txt"},
+)
diff --git a/tools/build/bazel/generate_test_rules.bzl b/tools/build/bazel/generate_test_rules.bzl
index 17f811e..4e3d5f8 100644
--- a/tools/build/bazel/generate_test_rules.bzl
+++ b/tools/build/bazel/generate_test_rules.bzl
@@ -20,6 +20,8 @@
 files.
 """
 
+load("//tools/build/bazel:deps_files.bzl", "deps_files")
+
 def testIsExcluded(exclude_tests, test):
     for excluded_test in exclude_tests:
         normalized_excluded_test = excluded_test.replace(".", "/")
@@ -64,20 +66,41 @@
             native.package_name() + "/" + _strip_right(test, ".java"),
         )
         package = java_class[:java_class.rfind(".")]
+
         native.java_test(
+            data = ["@jacoco_agent_runtime//jar"],
             name = prefix + test,
             runtime_deps = deps,
             resources = resources,
             size = test_size,
-            jvm_flags = jvm_flags,
+            #jvm_flags = jvm_flags,
             args = args,
             flaky = flaky,
             tags = tags,
             test_class = java_class,
             visibility = visibility,
             shard_count = shard_count,
+            jvm_flags = jvm_flags,
         )
 
+        jacoco_agent = "$(location @jacoco_agent_runtime//jar)"
+        native.java_test(
+            data = ["@jacoco_agent_runtime//jar"],
+            name = prefix + test + "-coverage",
+            runtime_deps = deps,
+            resources = resources,
+            size = "large",
+            #jvm_flags = jvm_flags,
+            args = args,
+            flaky = flaky,
+            tags = tags,
+            test_class = java_class,
+            visibility = visibility,
+            shard_count = shard_count,
+            jvm_flags = jvm_flags + ["-javaagent:" + jacoco_agent + "=destfile=/tmp/jacoco.exec"],
+        )
+    deps_files(name = name + "-deps", deps = deps)
+
 def _get_test_names(test_files):
     test_names = []
     for test_file in test_files:
diff --git a/tools/build/bazel/generate_workspace.bzl b/tools/build/bazel/generate_workspace.bzl
index 8a3eefc..f449018 100644
--- a/tools/build/bazel/generate_workspace.bzl
+++ b/tools/build/bazel/generate_workspace.bzl
@@ -1,4 +1,4 @@
-# ***** This file was auto-generated at Thu, 17 Jan 2019 02:17:59 GMT. Do not edit this file manually. *****
+# ***** This file was auto-generated at Sat, 19 Jan 2019 00:49:49 GMT. Do not edit this file manually. *****
 # ***** Use onos-lib-gen *****
 
 load("//tools/build/bazel:variables.bzl", "ONOS_GROUP_ID", "ONOS_VERSION")
@@ -459,6 +459,12 @@
             jar_sha256 = "4633c331f50642ebe795dc089d6a5928aff43071c9d17e7840a009eea2fe95a3",
             licenses = ["notice"],
             jar_urls = ["http://repo1.maven.org/maven2/com/squareup/okio/okio/1.14.0/okio-1.14.0.jar"],        )
+    if "jacoco_agent_runtime" not in native.existing_rules():
+        java_import_external(
+            name = "jacoco_agent_runtime",
+            jar_sha256 = "940056732802d1cbaf243840e0f8f2c786f5deb6c1dcac786637366a051257d8",
+            licenses = ["notice"],
+            jar_urls = ["http://repo1.maven.org/maven2/org/jacoco/org.jacoco.agent/0.8.2/org.jacoco.agent-0.8.2-runtime.jar"],        )
     if "jackson_annotations" not in native.existing_rules():
         java_import_external(
             name = "jackson_annotations",
@@ -1467,6 +1473,7 @@
 artifact_map["@logging_interceptor//:logging_interceptor"] = "mvn:com.squareup.okhttp3:logging-interceptor:jar:NON-OSGI:3.9.1"
 artifact_map["@moshi//:moshi"] = "mvn:com.squareup.moshi:moshi:jar:NON-OSGI:1.4.0"
 artifact_map["@okio//:okio"] = "mvn:com.squareup.okio:okio:jar:NON-OSGI:1.14.0"
+artifact_map["@jacoco_agent_runtime//:jacoco_agent_runtime"] = "mvn:org.jacoco:org.jacoco.agent:jar:runtime:NON-OSGI:0.8.2"
 artifact_map["@jackson_annotations//:jackson_annotations"] = "mvn:com.fasterxml.jackson.core:jackson-annotations:jar:2.9.5"
 artifact_map["@jackson_core//:jackson_core"] = "mvn:com.fasterxml.jackson.core:jackson-core:jar:2.9.5"
 artifact_map["@jackson_databind//:jackson_databind"] = "mvn:com.fasterxml.jackson.core:jackson-databind:jar:2.9.5"