Skip to content

Commit c749e86

Browse files
committed
refactor: update to use topic parser
Signed-off-by: Felix Gateru <[email protected]>
1 parent 3a1e88b commit c749e86

File tree

10 files changed

+34
-152
lines changed

10 files changed

+34
-152
lines changed

cmd/http/main.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/absmach/supermq"
2222
grpcChannelsV1 "github.com/absmach/supermq/api/grpc/channels/v1"
2323
grpcClientsV1 "github.com/absmach/supermq/api/grpc/clients/v1"
24+
grpcDomainsV1 "github.com/absmach/supermq/api/grpc/domains/v1"
2425
adapter "github.com/absmach/supermq/http"
2526
httpapi "github.com/absmach/supermq/http/api"
2627
"github.com/absmach/supermq/http/middleware"
@@ -201,12 +202,15 @@ func main() {
201202
return
202203
}
203204

204-
svc, err := newService(pub, authn, cacheConfig, clientsClient, channelsClient, domainsClient, logger, tracer)
205+
resolver := messaging.NewTopicResolver(channelsClient, domainsClient)
206+
handler, err := newHandler(nps, authn, cacheConfig, clientsClient, channelsClient, domainsClient, logger, tracer)
205207
if err != nil {
206208
logger.Error(fmt.Sprintf("failed to create service: %s", err))
207209
exitCode = 1
208210
return
209211
}
212+
svc := newService(clientsClient, channelsClient, nps, logger, tracer)
213+
210214
targetServerCfg := server.Config{Port: targetHTTPPort}
211215

212216
hs := httpserver.NewServer(ctx, cancel, svcName, targetServerCfg, httpapi.MakeHandler(ctx, svc, resolver, logger, cfg.InstanceID), logger)
@@ -233,27 +237,28 @@ func main() {
233237
}
234238
}
235239

236-
func newService(pub messaging.Publisher, authn smqauthn.Authentication, cacheCfg messaging.CacheConfig, clients grpcClientsV1.ClientsServiceClient, channels grpcChannelsV1.ChannelsServiceClient, domains grpcDomainsV1.DomainsServiceClient, logger *slog.Logger, tracer trace.Tracer) (session.Handler, error) {
240+
func newHandler(pub messaging.Publisher, authn smqauthn.Authentication, cacheCfg messaging.CacheConfig, clients grpcClientsV1.ClientsServiceClient, channels grpcChannelsV1.ChannelsServiceClient, domains grpcDomainsV1.DomainsServiceClient, logger *slog.Logger, tracer trace.Tracer) (session.Handler, error) {
237241
parser, err := messaging.NewTopicParser(cacheCfg, channels, domains)
238242
if err != nil {
239243
return nil, err
240244
}
241-
svc := adapter.NewHandler(pub, authn, clients, channels, parser, logger)
242-
svc = handler.NewTracing(tracer, svc)
243-
svc = handler.LoggingMiddleware(svc, logger)
245+
h := adapter.NewHandler(pub, authn, clients, channels, parser, logger)
246+
h = handler.NewTracing(tracer, h)
247+
h = handler.LoggingMiddleware(h, logger)
244248
counter, latency := prometheus.MakeMetrics(svcName, "handler")
245-
svc = handler.MetricsMiddleware(svc, counter, latency)
249+
h = handler.MetricsMiddleware(h, counter, latency)
246250

247-
return svc
251+
return h, nil
248252
}
249253

250254
func newService(clientsClient grpcClientsV1.ClientsServiceClient, channels grpcChannelsV1.ChannelsServiceClient, nps messaging.PubSub, logger *slog.Logger, tracer trace.Tracer) adapter.Service {
251255
svc := adapter.NewService(clientsClient, channels, nps)
252256
svc = middleware.Tracing(tracer, svc)
253257
svc = middleware.Logging(svc, logger)
254258
counter, latency := prometheus.MakeMetrics(svcName, "api")
255-
svc = handler.MetricsMiddleware(svc, counter, latency)
256-
return svc, nil
259+
svc = middleware.Metrics(svc, counter, latency)
260+
261+
return svc
257262
}
258263

259264
func proxyHTTP(ctx context.Context, cfg server.Config, logger *slog.Logger, sessionHandler session.Handler) error {

docker/.env

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -409,17 +409,6 @@ SMQ_COAP_ADAPTER_CACHE_MAX_COST=1048576
409409
SMQ_COAP_ADAPTER_CACHE_BUFFER_ITEMS=64
410410
SMQ_COAP_ADAPTER_INSTANCE_ID=
411411

412-
### WS
413-
SMQ_WS_ADAPTER_LOG_LEVEL=debug
414-
SMQ_WS_ADAPTER_HTTP_HOST=ws-adapter
415-
SMQ_WS_ADAPTER_HTTP_PORT=8186
416-
SMQ_WS_ADAPTER_HTTP_SERVER_CERT=
417-
SMQ_WS_ADAPTER_HTTP_SERVER_KEY=
418-
SMQ_WS_ADAPTER_CACHE_NUM_COUNTERS=200000
419-
SMQ_WS_ADAPTER_CACHE_MAX_COST=1048576
420-
SMQ_WS_ADAPTER_CACHE_BUFFER_ITEMS=64
421-
SMQ_WS_ADAPTER_INSTANCE_ID=
422-
423412
## Addons Services
424413
### Vault
425414
SMQ_VAULT_HOST=vault

docker/docker-compose.yaml

Lines changed: 0 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -1263,118 +1263,6 @@ services:
12631263
bind:
12641264
create_host_path: true
12651265

1266-
ws-adapter:
1267-
image: supermq/ws:${SMQ_RELEASE_TAG}
1268-
container_name: supermq-ws
1269-
depends_on:
1270-
- clients
1271-
- nats
1272-
restart: on-failure
1273-
environment:
1274-
SMQ_WS_ADAPTER_LOG_LEVEL: ${SMQ_WS_ADAPTER_LOG_LEVEL}
1275-
SMQ_WS_ADAPTER_HTTP_HOST: ${SMQ_WS_ADAPTER_HTTP_HOST}
1276-
SMQ_WS_ADAPTER_HTTP_PORT: ${SMQ_WS_ADAPTER_HTTP_PORT}
1277-
SMQ_WS_ADAPTER_HTTP_SERVER_CERT: ${SMQ_WS_ADAPTER_HTTP_SERVER_CERT}
1278-
SMQ_WS_ADAPTER_HTTP_SERVER_KEY: ${SMQ_WS_ADAPTER_HTTP_SERVER_KEY}
1279-
SMQ_WS_ADAPTER_CACHE_NUM_COUNTERS: ${SMQ_WS_ADAPTER_CACHE_NUM_COUNTERS}
1280-
SMQ_WS_ADAPTER_CACHE_MAX_COST: ${SMQ_WS_ADAPTER_CACHE_MAX_COST}
1281-
SMQ_WS_ADAPTER_CACHE_BUFFER_ITEMS: ${SMQ_WS_ADAPTER_CACHE_BUFFER_ITEMS}
1282-
SMQ_CLIENTS_GRPC_URL: ${SMQ_CLIENTS_GRPC_URL}
1283-
SMQ_CLIENTS_GRPC_TIMEOUT: ${SMQ_CLIENTS_GRPC_TIMEOUT}
1284-
SMQ_CLIENTS_GRPC_CLIENT_CERT: ${SMQ_CLIENTS_GRPC_CLIENT_CERT:+/clients-grpc-client.crt}
1285-
SMQ_CLIENTS_GRPC_CLIENT_KEY: ${SMQ_CLIENTS_GRPC_CLIENT_KEY:+/clients-grpc-client.key}
1286-
SMQ_CLIENTS_GRPC_SERVER_CA_CERTS: ${SMQ_CLIENTS_GRPC_SERVER_CA_CERTS:+/clients-grpc-server-ca.crt}
1287-
SMQ_CHANNELS_GRPC_URL: ${SMQ_CHANNELS_GRPC_URL}
1288-
SMQ_CHANNELS_GRPC_TIMEOUT: ${SMQ_CHANNELS_GRPC_TIMEOUT}
1289-
SMQ_CHANNELS_GRPC_CLIENT_CERT: ${SMQ_CHANNELS_GRPC_CLIENT_CERT:+/channels-grpc-client.crt}
1290-
SMQ_CHANNELS_GRPC_CLIENT_KEY: ${SMQ_CHANNELS_GRPC_CLIENT_KEY:+/channels-grpc-client.key}
1291-
SMQ_CHANNELS_GRPC_SERVER_CA_CERTS: ${SMQ_CHANNELS_GRPC_SERVER_CA_CERTS:+/channels-grpc-server-ca.crt}
1292-
SMQ_DOMAINS_GRPC_URL: ${SMQ_DOMAINS_GRPC_URL}
1293-
SMQ_DOMAINS_GRPC_TIMEOUT: ${SMQ_DOMAINS_GRPC_TIMEOUT}
1294-
SMQ_DOMAINS_GRPC_CLIENT_CERT: ${SMQ_DOMAINS_GRPC_CLIENT_CERT:+/domains-grpc-client.crt}
1295-
SMQ_DOMAINS_GRPC_CLIENT_KEY: ${SMQ_DOMAINS_GRPC_CLIENT_KEY:+/domains-grpc-client.key}
1296-
SMQ_DOMAINS_GRPC_SERVER_CA_CERTS: ${SMQ_DOMAINS_GRPC_SERVER_CA_CERTS:+/domains-grpc-server-ca.crt}
1297-
SMQ_AUTH_GRPC_URL: ${SMQ_AUTH_GRPC_URL}
1298-
SMQ_AUTH_GRPC_TIMEOUT: ${SMQ_AUTH_GRPC_TIMEOUT}
1299-
SMQ_AUTH_GRPC_CLIENT_CERT: ${SMQ_AUTH_GRPC_CLIENT_CERT:+/auth-grpc-client.crt}
1300-
SMQ_AUTH_GRPC_CLIENT_KEY: ${SMQ_AUTH_GRPC_CLIENT_KEY:+/auth-grpc-client.key}
1301-
SMQ_AUTH_GRPC_SERVER_CA_CERTS: ${SMQ_AUTH_GRPC_SERVER_CA_CERTS:+/auth-grpc-server-ca.crt}
1302-
SMQ_MESSAGE_BROKER_URL: ${SMQ_MESSAGE_BROKER_URL}
1303-
SMQ_JAEGER_URL: ${SMQ_JAEGER_URL}
1304-
SMQ_JAEGER_TRACE_RATIO: ${SMQ_JAEGER_TRACE_RATIO}
1305-
SMQ_SEND_TELEMETRY: ${SMQ_SEND_TELEMETRY}
1306-
SMQ_WS_ADAPTER_INSTANCE_ID: ${SMQ_WS_ADAPTER_INSTANCE_ID}
1307-
SMQ_ES_URL: ${SMQ_ES_URL}
1308-
ports:
1309-
- ${SMQ_WS_ADAPTER_HTTP_PORT}:${SMQ_WS_ADAPTER_HTTP_PORT}
1310-
networks:
1311-
- supermq-base-net
1312-
volumes:
1313-
# Clients gRPC mTLS client certificates
1314-
- type: bind
1315-
source: ${SMQ_CLIENTS_GRPC_CLIENT_CERT:-ssl/certs/dummy/client_cert}
1316-
target: /clients-grpc-client${SMQ_CLIENTS_GRPC_CLIENT_CERT:+.crt}
1317-
bind:
1318-
create_host_path: true
1319-
- type: bind
1320-
source: ${SMQ_CLIENTS_GRPC_CLIENT_KEY:-ssl/certs/dummy/client_key}
1321-
target: /clients-grpc-client${SMQ_CLIENTS_GRPC_CLIENT_KEY:+.key}
1322-
bind:
1323-
create_host_path: true
1324-
- type: bind
1325-
source: ${SMQ_CLIENTS_GRPC_SERVER_CA_CERTS:-ssl/certs/dummy/server_ca}
1326-
target: /clients-grpc-server-ca${SMQ_CLIENTS_GRPC_SERVER_CA_CERTS:+.crt}
1327-
bind:
1328-
create_host_path: true
1329-
# Channels gRPC mTLS client certificates
1330-
- type: bind
1331-
source: ${SMQ_CHANNELS_GRPC_CLIENT_CERT:-ssl/certs/dummy/client_cert}
1332-
target: /channels-grpc-client${SMQ_CHANNELS_GRPC_CLIENT_CERT:+.crt}
1333-
bind:
1334-
create_host_path: true
1335-
- type: bind
1336-
source: ${SMQ_CHANNELS_GRPC_CLIENT_KEY:-ssl/certs/dummy/client_key}
1337-
target: /channels-grpc-client${SMQ_CHANNELS_GRPC_CLIENT_KEY:+.key}
1338-
bind:
1339-
create_host_path: true
1340-
- type: bind
1341-
source: ${SMQ_CHANNELS_GRPC_SERVER_CA_CERTS:-ssl/certs/dummy/server_ca}
1342-
target: /channels-grpc-server-ca${SMQ_CHANNELS_GRPC_SERVER_CA_CERTS:+.crt}
1343-
bind:
1344-
create_host_path: true
1345-
# Auth gRPC mTLS client certificates
1346-
- type: bind
1347-
source: ${SMQ_AUTH_GRPC_CLIENT_CERT:-ssl/certs/dummy/client_cert}
1348-
target: /auth-grpc-client${SMQ_AUTH_GRPC_CLIENT_CERT:+.crt}
1349-
bind:
1350-
create_host_path: true
1351-
- type: bind
1352-
source: ${SMQ_AUTH_GRPC_CLIENT_KEY:-ssl/certs/dummy/client_key}
1353-
target: /auth-grpc-client${SMQ_AUTH_GRPC_CLIENT_KEY:+.key}
1354-
bind:
1355-
create_host_path: true
1356-
- type: bind
1357-
source: ${SMQ_AUTH_GRPC_SERVER_CA_CERTS:-ssl/certs/dummy/server_ca}
1358-
target: /auth-grpc-server-ca${SMQ_AUTH_GRPC_SERVER_CA_CERTS:+.crt}
1359-
bind:
1360-
create_host_path: true
1361-
# Domains gRPC mTLS client certificates
1362-
- type: bind
1363-
source: ${SMQ_DOMAINS_GRPC_CLIENT_CERT:-ssl/certs/dummy/client_cert}
1364-
target: /domains-grpc-server${SMQ_DOMAINS_GRPC_CLIENT_CERT:+.crt}
1365-
bind:
1366-
create_host_path: true
1367-
- type: bind
1368-
source: ${SMQ_DOMAINS_GRPC_CLIENT_KEY:-ssl/certs/dummy/client_key}
1369-
target: /domains-grpc-server${SMQ_DOMAINS_GRPC_CLIENT_KEY:+.key}
1370-
bind:
1371-
create_host_path: true
1372-
- type: bind
1373-
source: ${SMQ_DOMAINS_GRPC_SERVER_CA_CERTS:-ssl/certs/dummy/server_ca}
1374-
target: /domains-grpc-server-ca${SMQ_DOMAINS_GRPC_SERVER_CA_CERTS:+.crt}
1375-
bind:
1376-
create_host_path: true
1377-
13781266
rabbitmq:
13791267
image: rabbitmq:4.0.5-management-alpine
13801268
container_name: supermq-rabbitmq

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ require (
66
github.com/0x6flab/namegenerator v1.4.0
77
github.com/absmach/callhome v0.14.0
88
github.com/absmach/certs v0.0.0-20250602111612-89538302ad6a
9-
github.com/absmach/mgate v0.4.6-0.20250605150648-edf967fbb46a
9+
github.com/absmach/mgate v0.4.6-0.20250616124539-13181c84f1d5
1010
github.com/absmach/senml v1.0.8
1111
github.com/authzed/authzed-go v1.4.1
1212
github.com/authzed/grpcutil v0.0.0-20250221190651-1985b19b35b8

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ github.com/absmach/certs v0.0.0-20250602111612-89538302ad6a h1:swYXNJaGVQS35CeuX
2525
github.com/absmach/certs v0.0.0-20250602111612-89538302ad6a/go.mod h1:tEat7G8BzyWbFIFojqdzWSD6RZNFyEuUHBdnD0J+rZA=
2626
github.com/absmach/mgate v0.4.6-0.20250605150648-edf967fbb46a h1:1+772OQFHAS23JLAHrCZxO+DnGoiMllKcSwLQy74y+k=
2727
github.com/absmach/mgate v0.4.6-0.20250605150648-edf967fbb46a/go.mod h1:X2amjQg/2cnM+UKblMdpU2M4cZO74xtEHNIxtuUXCeA=
28+
github.com/absmach/mgate v0.4.6-0.20250616124539-13181c84f1d5 h1:cbJncI2bzHxj4y0znacoVlamVi9rN2ERVuHGMU3hCRc=
29+
github.com/absmach/mgate v0.4.6-0.20250616124539-13181c84f1d5/go.mod h1:X2amjQg/2cnM+UKblMdpU2M4cZO74xtEHNIxtuUXCeA=
2830
github.com/absmach/senml v1.0.8 h1:+opem/r4g6c6eA/JLyCIuksyEhj7eBdysY3pEmy1mqo=
2931
github.com/absmach/senml v1.0.8/go.mod h1:DRhzHLgvQoIUHroBgpFrSWso+bJZO9E96RlHAHy+VRI=
3032
github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=

http/api/endpoint_test.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
grpcChannelsV1 "github.com/absmach/supermq/api/grpc/channels/v1"
2121
grpcClientsV1 "github.com/absmach/supermq/api/grpc/clients/v1"
2222
grpcCommonV1 "github.com/absmach/supermq/api/grpc/common/v1"
23+
grpcDomainsV1 "github.com/absmach/supermq/api/grpc/domains/v1"
2324
apiutil "github.com/absmach/supermq/api/http/util"
2425
chmocks "github.com/absmach/supermq/channels/mocks"
2526
climocks "github.com/absmach/supermq/clients/mocks"
@@ -96,7 +97,7 @@ func newService(clients grpcClientsV1.ClientsServiceClient, channels grpcChannel
9697
return server.NewService(clients, channels, pubsub)
9798
}
9899

99-
func newHandler(authn smqauthn.Authentication, clients grpcClientsV1.ClientsServiceClient, channels grpcChannelsV1.ChannelsServiceClient, resolver messaging.TopicResolver) (session.Handler, *pubsub.PubSub, error) {
100+
func newHandler(authn smqauthn.Authentication, clients grpcClientsV1.ClientsServiceClient, channels grpcChannelsV1.ChannelsServiceClient, domains grpcDomainsV1.DomainsServiceClient) (session.Handler, *pubsub.PubSub, error) {
100101
pub := new(pubsub.PubSub)
101102
parser, err := messaging.NewTopicParser(messaging.DefaultCacheConfig, channels, domains)
102103
if err != nil {
@@ -167,9 +168,11 @@ func TestPublish(t *testing.T) {
167168
msg := `[{"n":"current","t":-1,"v":1.6}]`
168169
msgJSON := `{"field1":"val1","field2":"val2"}`
169170
msgCBOR := `81A3616E6763757272656E746174206176FB3FF999999999999A`
170-
svc, pub, err := newService(authn, clients, channels, domains)
171+
handler, pubsub, err := newHandler(authn, clients, channels, domains)
171172
assert.Nil(t, err, fmt.Sprintf("failed to create service with err: %v", err))
172-
target := newTargetHTTPServer()
173+
resolver := messaging.NewTopicResolver(channels, domains)
174+
svc := newService(clients, channels, pubsub)
175+
target := newTargetHTTPServer(resolver, svc)
173176
defer target.Close()
174177
ts, err := newProxyHTPPServer(handler, target)
175178
assert.Nil(t, err, fmt.Sprintf("failed to create proxy server with err: %v", err))
@@ -339,7 +342,8 @@ func TestHandshake(t *testing.T) {
339342
authn := new(authnMocks.Authentication)
340343
domains := new(dmocks.DomainsServiceClient)
341344
resolver := messaging.NewTopicResolver(channels, domains)
342-
handler, pubsub := newHandler(authn, clients, channels, resolver)
345+
handler, pubsub, err := newHandler(authn, clients, channels, domains)
346+
assert.Nil(t, err, fmt.Sprintf("failed to create handler with err: %v", err))
343347
svc := newService(clients, channels, pubsub)
344348
target := newTargetHTTPServer(resolver, svc)
345349
defer target.Close()

http/api/transport.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ func decodeWSReq(r *http.Request, resolver messaging.TopicResolver, logger *slog
100100
domain := chi.URLParam(r, "domain")
101101
channel := chi.URLParam(r, "channel")
102102

103-
domainID, channelID, err := resolver.Resolve(r.Context(), domain, channel)
103+
domainID, channelID, _, err := resolver.Resolve(r.Context(), domain, channel)
104104
if err != nil {
105105
return connReq{}, err
106106
}

http/handler.go

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,7 @@ func (h *handler) AuthPublish(ctx context.Context, topic *string, payload *[]byt
108108
return errClientNotInitialized
109109
}
110110

111-
domain, channel, _, err := messaging.ParsePublishTopic(*topic)
112-
if err != nil {
113-
return mgate.NewHTTPProxyError(http.StatusBadRequest, errors.Wrap(errFailedPublish, err))
114-
}
115-
domainID, channelID, err := h.resolver.Resolve(ctx, domain, channel)
111+
domainID, channelID, _, err := h.parser.ParsePublishTopic(ctx, *topic, true)
116112
if err != nil {
117113
return mgate.NewHTTPProxyError(http.StatusBadRequest, errors.Wrap(errFailedPublish, err))
118114
}
@@ -140,15 +136,11 @@ func (h *handler) AuthSubscribe(ctx context.Context, topics *[]string) error {
140136
}
141137

142138
for _, topic := range *topics {
143-
domain, channel, _, err := messaging.ParseSubscribeTopic(topic)
139+
domainID, channelID, _, err := h.parser.ParseSubscribeTopic(ctx, topic, true)
144140
if err != nil {
145141
return err
146142
}
147-
domainID, chanID, err := h.resolver.Resolve(ctx, domain, channel)
148-
if err != nil {
149-
return mgate.NewHTTPProxyError(http.StatusBadRequest, errors.Wrap(errFailedPublish, err))
150-
}
151-
if _, _, err := h.authAccess(ctx, string(s.Password), domainID, chanID, connections.Subscribe); err != nil {
143+
if _, _, err := h.authAccess(ctx, string(s.Password), domainID, channelID, connections.Subscribe); err != nil {
152144
return err
153145
}
154146
}

http/handler_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ func TestAuthConnect(t *testing.T) {
139139
}
140140

141141
func TestAuthPublish(t *testing.T) {
142-
handler := newHandler()
142+
handler := newHandler(t)
143143

144144
clientKeySession := session.Session{
145145
Password: []byte("Client " + clientKey),
@@ -278,7 +278,7 @@ func TestAuthPublish(t *testing.T) {
278278
}
279279

280280
func TestAuthSubscribe(t *testing.T) {
281-
handler := newHandler()
281+
handler := newHandler(t)
282282

283283
clientKeySession := session.Session{
284284
Password: []byte("Client " + clientKey),

pkg/sdk/message_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,14 @@ func setupMessages(t *testing.T) (*httptest.Server, *pubsub.PubSub) {
4848
domainsGRPCClient = new(dmocks.DomainsServiceClient)
4949
pub := new(pubsub.PubSub)
5050
authn := new(authnmocks.Authentication)
51+
svc := new(httpmocks.Service)
5152

5253
parser, err := messaging.NewTopicParser(messaging.DefaultCacheConfig, channelsGRPCClient, domainsGRPCClient)
5354
assert.Nil(t, err, fmt.Sprintf("unexpected error while setting up parser: %v", err))
5455
handler := adapter.NewHandler(pub, authn, clientsGRPCClient, channelsGRPCClient, parser, smqlog.NewMock())
56+
resolver := messaging.NewTopicResolver(channelsGRPCClient, domainsGRPCClient)
5557

56-
mux := api.MakeHandler(context.Background(), svc,resolver, smqlog.NewMock(), "")
58+
mux := api.MakeHandler(context.Background(), svc, resolver, smqlog.NewMock(), "")
5759
target := httptest.NewServer(mux)
5860

5961
ptUrl, _ := url.Parse(target.URL)

0 commit comments

Comments
 (0)