Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

github.com/Nikita-Filonov/tests-coverage-tool

Package Overview
Dependencies
Alerts
File Explorer
Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/Nikita-Filonov/tests-coverage-tool

  • v1.0.0
  • Source
  • Go
  • Socket score

Version published
Created
Source

Tests coverage tool

The Tests Coverage Tool is a comprehensive utility designed to measure code coverage for gRPC services based on their proto contracts. It provides detailed insights into various aspects of your service's coverage, helping you ensure that your tests thoroughly validate your gRPC endpoints. The tool gathers the following metrics:

  • Total Coverage Percentage: The overall coverage percentage across all services;
  • Service-Specific Coverage: The coverage percentage for each logical service within your gRPC API;
  • Method Coverage: Whether each gRPC method is covered by tests (covered/not covered);
  • Request/Response Coverage: Detailed coverage for each method, including the total request parameters, the number of covered parameters, and the coverage percentage;
  • Parameter-Level Coverage: In-depth coverage details for each parameter within the request/response, allowing you to see which parts of your API are thoroughly tested;
  • Deprecation Status: Information on whether methods and their parameters are deprecated, aiding in maintaining up-to-date and clean tests;
  • Support for Multiple Services: The tool can handle coverage reporting for multiple gRPC services within a single project.

You can see a report example here.

If you have any questions, you can ask @Nikita Filonov

Installation

To install the Tests Coverage Tool, use the following command:

go get github.com/Nikita-Filonov/tests-coverage-tool@latest

Usage

Client interceptor

Below is an example of how to set up the gRPC client with the coverage interceptor:

package test

import (
	"context"
	"crypto/tls"
	"fmt"
	"log"
	"testing"

	grpcmiddleware "github.com/grpc-ecosystem/go-grpc-middleware"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials"

	"github.com/Nikita-Filonov/tests-coverage-tool/tool/coverageinupt"
)

func TestGRPC(t *testing.T) {
	// Set up a gRPC client connection with the coverage interceptor
	conn, err := grpc.Dial(
		"localhost:1000",
		grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{InsecureSkipVerify: true})),
		grpc.WithUnaryInterceptor(
			grpcmiddleware.ChainUnaryClient(
				// Integrate the CoverageInterceptor to track method coverage
				coverageinupt.CoverageInterceptor(),
			),
		),
	)
	if err != nil {
		log.Fatalf("Failed to connect to gRPC server: %v", err)
	}
	defer conn.Close()

	// Initialize the proto service client
	client := servicev1.NewServiceClient(conn)

	// Call a gRPC method; coverage data will be automatically saved in the specified directory
	resp, err := client.Get(context.Background(), &servicev1.GetRequest{})

	fmt.Println(resp, err)
}

Generate report

Before generating the coverage report, ensure that the tests-coverage-tool is installed. This tool relies on server reflection to gather data, so your gRPC service must support server reflection; otherwise, the tool will be unable to measure service coverage.

To install the tool, run:

go install github.com/Nikita-Filonov/tests-coverage-tool/...@latest

Once installed, you can generate the coverage report with the following command:

tests-coverage-tool save-report

This will generate a coverage report based on the results gathered during your test runs.

Config

The tool can be configured via environment variables or a YAML configuration file. Below are the available options:

EnvironmentYAMLDefaultExample
servicesDefines the gRPC services to monitor. See the example configuration file at ./examples/config-example.yaml
TESTS_COVERAGE_CONFIG_FILEPath to the YAML configuration file. Example: ./examples/config-example.yaml
TESTS_COVERAGE_RESULTS_DIRresultsDir.Directory where coverage results will be stored. Example: if set to ./tests, results will be stored in ./tests/coverage-results
TESTS_COVERAGE_HTML_REPORT_DIRhtmlReportDir.Directory where the HTML report will be saved
TESTS_COVERAGE_JSON_REPORT_DIRjsonReportDir.Directory where the JSON report will be saved
TESTS_COVERAGE_HTML_REPORT_FILEhtmlReportFileindex.htmlName of the HTML report file
TESTS_COVERAGE_JSON_REPORT_FILEjsonReportFilecoverage-report.jsonName of the JSON report file

Commands

Save report

To save a coverage report, use the following command:

go run ./tests-coverage-tool/main.go save-report

This command will generate and save the coverage report based on the collected test data.

Copy report

To update and merge submodules and then copy the report, run:

git submodule update --init --recursive
git submodule update --remote --merge

go run ./tests-coverage-tool/main.go copy-report

This command is useful for syncing submodules and copying the report to the desired location.

Print config

To print the current configuration, use the following command:

go run ./tests-coverage-tool/main.go print-config

This command outputs the configuration settings currently in use, allowing you to verify and adjust as needed

FAQs

Package last updated on 14 Sep 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc