Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ping to clients #61

Merged
merged 1 commit into from
Dec 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions proto/platform/clients.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
platformauth "chainguard.dev/sdk/proto/platform/auth/v1"
iam "chainguard.dev/sdk/proto/platform/iam/v1"
platformoidc "chainguard.dev/sdk/proto/platform/oidc/v1"
ping "chainguard.dev/sdk/proto/platform/ping/v1"
registry "chainguard.dev/sdk/proto/platform/registry/v1"
tenant "chainguard.dev/sdk/proto/platform/tenant/v1"
"google.golang.org/grpc"
Expand All @@ -30,6 +31,7 @@ type Clients interface {
Tenant() tenant.Clients
Registry() registry.Clients
Advisory() advisory.Clients
Ping() ping.Clients

Close() error
}
Expand Down Expand Up @@ -68,6 +70,7 @@ func NewPlatformClients(ctx context.Context, apiURL string, cred credentials.Per
tenant: tenant.NewClientsFromConnection(conn),
registry: registry.NewClientsFromConnection(conn),
advisory: advisory.NewClientsFromConnection(conn),
ping: ping.NewClientsFromConnection(conn),
conn: conn,
}, nil
}
Expand All @@ -77,6 +80,7 @@ type clients struct {
tenant tenant.Clients
registry registry.Clients
advisory advisory.Clients
ping ping.Clients

conn *grpc.ClientConn
}
Expand All @@ -97,6 +101,10 @@ func (c *clients) Advisory() advisory.Clients {
return c.advisory
}

func (c *clients) Ping() ping.Clients {
return c.ping
}

func (c *clients) Close() error {
return c.conn.Close()
}
Expand Down
80 changes: 80 additions & 0 deletions proto/platform/ping/v1/clients.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
/*
Copyright 2023 Chainguard, Inc.
SPDX-License-Identifier: Apache-2.0
*/

package v1

import (
"context"
"fmt"
"net/url"
"time"

delegate "chainguard.dev/go-grpc-kit/pkg/options"
"google.golang.org/grpc"
"knative.dev/pkg/logging"

"chainguard.dev/sdk/auth"
)

type Clients interface {
Ping() PingServiceClient

Close() error
}

func NewClients(ctx context.Context, addr string, token string) (Clients, error) {
uri, err := url.Parse(addr)
if err != nil {
return nil, fmt.Errorf("failed to parse ping service address, must be a url: %w", err)
}

target, opts := delegate.GRPCOptions(*uri)

// TODO: we may want to require transport security at some future point.
if cred := auth.NewFromToken(ctx, token, false); cred != nil {
opts = append(opts, grpc.WithPerRPCCredentials(cred))
} else {
logging.FromContext(ctx).Warn("No authentication provided, this may end badly.")
}

var cancel context.CancelFunc
if _, timeoutSet := ctx.Deadline(); !timeoutSet {
ctx, cancel = context.WithTimeout(ctx, 300*time.Second)
defer cancel()
}
conn, err := grpc.DialContext(ctx, target, opts...)
if err != nil {
return nil, fmt.Errorf("failed to connect to the iam server: %w", err)
}

return &clients{
ping: NewPingServiceClient(conn),

conn: conn,
}, nil
}

func NewClientsFromConnection(conn *grpc.ClientConn) Clients {
return &clients{
ping: NewPingServiceClient(conn),
// conn is not set, this client struct does not own closing it.
}
}

type clients struct {
ping PingServiceClient
conn *grpc.ClientConn
}

func (c *clients) Ping() PingServiceClient {
return c.ping
}

func (c *clients) Close() error {
if c.conn != nil {
return c.conn.Close()
}
return nil
}
48 changes: 48 additions & 0 deletions proto/platform/ping/v1/test/ping.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
Copyright 2023 Chainguard, Inc.
SPDX-License-Identifier: Apache-2.0
*/

package test

import (
"context"

"google.golang.org/grpc"

ping "chainguard.dev/sdk/proto/platform/ping/v1"
)

var _ ping.Clients = (*MockPingServiceClients)(nil)

type MockPingServiceClients struct {
OnClose error

PingServiceClient MockPingServiceClient
}

func (m MockPingServiceClients) Ping() ping.PingServiceClient {
return &m.PingServiceClient
}

func (m MockPingServiceClients) Close() error {
return m.OnClose
}

var _ ping.PingServiceClient = (*MockPingServiceClient)(nil)

type MockPingServiceClient struct {
ping.PingServiceClient

OnPing Ping
}

type Ping struct {
Given *ping.PingRequest
Response *ping.Response
Error error
}

func (m MockPingServiceClient) Ping(_ context.Context, _ *ping.PingRequest, _ ...grpc.CallOption) (*ping.Response, error) {
return &ping.Response{}, nil
}
7 changes: 7 additions & 0 deletions proto/platform/test/mock_clients.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ import (
iamtest "chainguard.dev/sdk/proto/platform/iam/v1/test"
oidc "chainguard.dev/sdk/proto/platform/oidc/v1"
oidctest "chainguard.dev/sdk/proto/platform/oidc/v1/test"
ping "chainguard.dev/sdk/proto/platform/ping/v1"
pingtest "chainguard.dev/sdk/proto/platform/ping/v1/test"
registry "chainguard.dev/sdk/proto/platform/registry/v1"
registrytest "chainguard.dev/sdk/proto/platform/registry/v1/test"
tenant "chainguard.dev/sdk/proto/platform/tenant/v1"
Expand All @@ -30,6 +32,7 @@ type MockPlatformClients struct {
TenantClient tenanttest.MockTenantClient
RegistryClient registrytest.MockRegistryClients
AdvisoryClient advisorytest.MockSecurityAdvisoryClients
PingClient pingtest.MockPingServiceClients
}

func (m MockPlatformClients) Close() error {
Expand All @@ -52,6 +55,10 @@ func (m MockPlatformClients) Advisory() advisory.Clients {
return m.AdvisoryClient
}

func (m MockPlatformClients) Ping() ping.Clients {
return m.PingClient
}

var _ platform.OIDCClients = (*MockOIDCClients)(nil)

type MockOIDCClients struct {
Expand Down
Loading