diff --git a/Makefile b/Makefile index 87025870e..4ca527582 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,9 @@ .PHONY: compile-el compile-dl clean protoc lint build unit-tests integration-tests-churner integration-tests-indexer integration-tests-inabox integration-tests-inabox-nochurner integration-tests-graph-indexer PROTOS := ./api/proto -PROTOS_DISPERSER := ./disperser/proto +PROTOS_DISPERSER := ./disperser/api/proto PROTO_GEN := ./api/grpc -PROTO_GEN_DISPERSER_PATH = ./disperser/proto/protogen +PROTO_GEN_DISPERSER_PATH = ./disperser/api/grpc compile-el: cd contracts && ./compile.sh compile-el diff --git a/churner/Dockerfile b/churner/cmd/Dockerfile similarity index 100% rename from churner/Dockerfile rename to churner/cmd/Dockerfile diff --git a/disperser/Makefile b/disperser/Makefile index a07252f7a..599bfe05d 100644 --- a/disperser/Makefile +++ b/disperser/Makefile @@ -7,7 +7,7 @@ build_batcher: go build -o ./bin/batcher ./cmd/batcher build_server: - go build -o ./bin/server ./cmd/disperserserver + go build -o ./bin/server ./cmd/apiserver build_encoder: go build -o ./bin/encoder ./cmd/encoder diff --git a/disperser/proto/protogen/encoder/encoder.pb.go b/disperser/api/grpc/encoder/encoder.pb.go similarity index 100% rename from disperser/proto/protogen/encoder/encoder.pb.go rename to disperser/api/grpc/encoder/encoder.pb.go diff --git a/disperser/proto/protogen/encoder/encoder_grpc.pb.go b/disperser/api/grpc/encoder/encoder_grpc.pb.go similarity index 100% rename from disperser/proto/protogen/encoder/encoder_grpc.pb.go rename to disperser/api/grpc/encoder/encoder_grpc.pb.go diff --git a/disperser/proto/encoder/encoder.proto b/disperser/api/proto/encoder/encoder.proto similarity index 100% rename from disperser/proto/encoder/encoder.proto rename to disperser/api/proto/encoder/encoder.proto diff --git a/disperser/apiserver/server_test.go b/disperser/apiserver/server_test.go index 7afae0592..6bd4665c1 100644 --- a/disperser/apiserver/server_test.go +++ b/disperser/apiserver/server_test.go @@ -10,7 +10,7 @@ import ( "time" "github.com/Layr-Labs/eigenda/disperser/apiserver" - "github.com/Layr-Labs/eigenda/disperser/blobstore" + "github.com/Layr-Labs/eigenda/disperser/common/blobstore" gethcommon "github.com/ethereum/go-ethereum/common" "github.com/google/uuid" diff --git a/disperser/batcher/batcher_test.go b/disperser/batcher/batcher_test.go index 8ad6b1ab0..d79b85aa9 100644 --- a/disperser/batcher/batcher_test.go +++ b/disperser/batcher/batcher_test.go @@ -18,7 +18,7 @@ import ( "github.com/Layr-Labs/eigenda/disperser" bat "github.com/Layr-Labs/eigenda/disperser/batcher" batchermock "github.com/Layr-Labs/eigenda/disperser/batcher/mock" - "github.com/Layr-Labs/eigenda/disperser/inmem" + "github.com/Layr-Labs/eigenda/disperser/common/inmem" dmock "github.com/Layr-Labs/eigenda/disperser/mock" "github.com/Layr-Labs/eigenda/pkg/encoding/kzgEncoder" gethcommon "github.com/ethereum/go-ethereum/common" diff --git a/disperser/batcher/encoding_streamer_test.go b/disperser/batcher/encoding_streamer_test.go index 5e7fdcbd5..6b8be688b 100644 --- a/disperser/batcher/encoding_streamer_test.go +++ b/disperser/batcher/encoding_streamer_test.go @@ -12,7 +12,7 @@ import ( coremock "github.com/Layr-Labs/eigenda/core/mock" "github.com/Layr-Labs/eigenda/disperser" "github.com/Layr-Labs/eigenda/disperser/batcher" - "github.com/Layr-Labs/eigenda/disperser/inmem" + "github.com/Layr-Labs/eigenda/disperser/common/inmem" "github.com/Layr-Labs/eigenda/disperser/mock" "github.com/stretchr/testify/assert" tmock "github.com/stretchr/testify/mock" diff --git a/disperser/eth/confirmer.go b/disperser/batcher/eth/confirmer.go similarity index 100% rename from disperser/eth/confirmer.go rename to disperser/batcher/eth/confirmer.go diff --git a/disperser/eth/confirmer_test.go b/disperser/batcher/eth/confirmer_test.go similarity index 97% rename from disperser/eth/confirmer_test.go rename to disperser/batcher/eth/confirmer_test.go index e47c004a0..66cba1b6d 100644 --- a/disperser/eth/confirmer_test.go +++ b/disperser/batcher/eth/confirmer_test.go @@ -8,7 +8,7 @@ import ( "github.com/Layr-Labs/eigenda/core" coremock "github.com/Layr-Labs/eigenda/core/mock" - "github.com/Layr-Labs/eigenda/disperser/eth" + "github.com/Layr-Labs/eigenda/disperser/batcher/eth" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/stretchr/testify/assert" diff --git a/disperser/batcher/finalizer_test.go b/disperser/batcher/finalizer_test.go index 812100ba0..0f712bb00 100644 --- a/disperser/batcher/finalizer_test.go +++ b/disperser/batcher/finalizer_test.go @@ -11,7 +11,7 @@ import ( "github.com/Layr-Labs/eigenda/core" "github.com/Layr-Labs/eigenda/disperser" "github.com/Layr-Labs/eigenda/disperser/batcher" - "github.com/Layr-Labs/eigenda/disperser/inmem" + "github.com/Layr-Labs/eigenda/disperser/common/inmem" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/stretchr/testify/assert" diff --git a/disperser/dispatcher/dispatcher.go b/disperser/batcher/grpc/dispatcher.go similarity index 100% rename from disperser/dispatcher/dispatcher.go rename to disperser/batcher/grpc/dispatcher.go diff --git a/disperser/disperser.Dockerfile b/disperser/cmd/apiserver/Dockerfile similarity index 100% rename from disperser/disperser.Dockerfile rename to disperser/cmd/apiserver/Dockerfile diff --git a/disperser/cmd/disperserserver/config.go b/disperser/cmd/apiserver/config.go similarity index 94% rename from disperser/cmd/disperserserver/config.go rename to disperser/cmd/apiserver/config.go index 48887e6d6..b0af8244a 100644 --- a/disperser/cmd/disperserserver/config.go +++ b/disperser/cmd/apiserver/config.go @@ -7,8 +7,8 @@ import ( "github.com/Layr-Labs/eigenda/common/ratelimit" "github.com/Layr-Labs/eigenda/disperser" "github.com/Layr-Labs/eigenda/disperser/apiserver" - "github.com/Layr-Labs/eigenda/disperser/blobstore" - "github.com/Layr-Labs/eigenda/disperser/cmd/disperserserver/flags" + "github.com/Layr-Labs/eigenda/disperser/cmd/apiserver/flags" + "github.com/Layr-Labs/eigenda/disperser/common/blobstore" "github.com/urfave/cli" ) diff --git a/disperser/cmd/disperserserver/flags/flags.go b/disperser/cmd/apiserver/flags/flags.go similarity index 100% rename from disperser/cmd/disperserserver/flags/flags.go rename to disperser/cmd/apiserver/flags/flags.go diff --git a/disperser/cmd/disperserserver/main.go b/disperser/cmd/apiserver/main.go similarity index 96% rename from disperser/cmd/disperserserver/main.go rename to disperser/cmd/apiserver/main.go index 066f40d81..65484b3fb 100644 --- a/disperser/cmd/disperserserver/main.go +++ b/disperser/cmd/apiserver/main.go @@ -9,7 +9,7 @@ import ( "github.com/Layr-Labs/eigenda/common" "github.com/Layr-Labs/eigenda/disperser/apiserver" - "github.com/Layr-Labs/eigenda/disperser/blobstore" + "github.com/Layr-Labs/eigenda/disperser/common/blobstore" "github.com/Layr-Labs/eigenda/common/aws/dynamodb" "github.com/Layr-Labs/eigenda/common/aws/s3" @@ -19,7 +19,7 @@ import ( "github.com/Layr-Labs/eigenda/common/store" "github.com/Layr-Labs/eigenda/core/eth" "github.com/Layr-Labs/eigenda/disperser" - "github.com/Layr-Labs/eigenda/disperser/cmd/disperserserver/flags" + "github.com/Layr-Labs/eigenda/disperser/cmd/apiserver/flags" "github.com/urfave/cli" ) diff --git a/disperser/batcher.Dockerfile b/disperser/cmd/batcher/Dockerfile similarity index 100% rename from disperser/batcher.Dockerfile rename to disperser/cmd/batcher/Dockerfile diff --git a/disperser/cmd/batcher/config.go b/disperser/cmd/batcher/config.go index 9e6838849..33407c983 100644 --- a/disperser/cmd/batcher/config.go +++ b/disperser/cmd/batcher/config.go @@ -6,8 +6,8 @@ import ( "github.com/Layr-Labs/eigenda/common/logging" "github.com/Layr-Labs/eigenda/core/encoding" "github.com/Layr-Labs/eigenda/disperser/batcher" - "github.com/Layr-Labs/eigenda/disperser/blobstore" "github.com/Layr-Labs/eigenda/disperser/cmd/batcher/flags" + "github.com/Layr-Labs/eigenda/disperser/common/blobstore" "github.com/Layr-Labs/eigenda/indexer" "github.com/urfave/cli" ) diff --git a/disperser/cmd/batcher/main.go b/disperser/cmd/batcher/main.go index e1bab335e..c3b2e5955 100644 --- a/disperser/cmd/batcher/main.go +++ b/disperser/cmd/batcher/main.go @@ -22,11 +22,11 @@ import ( "github.com/Layr-Labs/eigenda/core" coreeth "github.com/Layr-Labs/eigenda/core/eth" "github.com/Layr-Labs/eigenda/disperser/batcher" - "github.com/Layr-Labs/eigenda/disperser/blobstore" + "github.com/Layr-Labs/eigenda/disperser/batcher/eth" + dispatcher "github.com/Layr-Labs/eigenda/disperser/batcher/grpc" "github.com/Layr-Labs/eigenda/disperser/cmd/batcher/flags" - "github.com/Layr-Labs/eigenda/disperser/dispatcher" + "github.com/Layr-Labs/eigenda/disperser/common/blobstore" "github.com/Layr-Labs/eigenda/disperser/encoder" - "github.com/Layr-Labs/eigenda/disperser/eth" "github.com/ethereum/go-ethereum/rpc" "github.com/urfave/cli" ) diff --git a/disperser/dataapi.Dockerfile b/disperser/cmd/dataapi/Dockerfile similarity index 100% rename from disperser/dataapi.Dockerfile rename to disperser/cmd/dataapi/Dockerfile diff --git a/disperser/cmd/dataapi/config.go b/disperser/cmd/dataapi/config.go index 2f7a644c9..0689bb747 100644 --- a/disperser/cmd/dataapi/config.go +++ b/disperser/cmd/dataapi/config.go @@ -4,8 +4,8 @@ import ( "github.com/Layr-Labs/eigenda/common/aws" "github.com/Layr-Labs/eigenda/common/geth" "github.com/Layr-Labs/eigenda/common/logging" - "github.com/Layr-Labs/eigenda/disperser/blobstore" "github.com/Layr-Labs/eigenda/disperser/cmd/dataapi/flags" + "github.com/Layr-Labs/eigenda/disperser/common/blobstore" "github.com/Layr-Labs/eigenda/disperser/dataapi" "github.com/Layr-Labs/eigenda/disperser/dataapi/prometheus" "github.com/urfave/cli" diff --git a/disperser/cmd/dataapi/main.go b/disperser/cmd/dataapi/main.go index 80c488271..7c91c4e46 100644 --- a/disperser/cmd/dataapi/main.go +++ b/disperser/cmd/dataapi/main.go @@ -11,8 +11,8 @@ import ( "github.com/Layr-Labs/eigenda/common/geth" "github.com/Layr-Labs/eigenda/common/logging" coreeth "github.com/Layr-Labs/eigenda/core/eth" - "github.com/Layr-Labs/eigenda/disperser/blobstore" "github.com/Layr-Labs/eigenda/disperser/cmd/dataapi/flags" + "github.com/Layr-Labs/eigenda/disperser/common/blobstore" "github.com/Layr-Labs/eigenda/disperser/dataapi" "github.com/Layr-Labs/eigenda/disperser/dataapi/prometheus" "github.com/Layr-Labs/eigenda/disperser/dataapi/subgraph" diff --git a/disperser/encoder.Dockerfile b/disperser/cmd/encoder/Dockerfile similarity index 100% rename from disperser/encoder.Dockerfile rename to disperser/cmd/encoder/Dockerfile diff --git a/disperser/blobstore/blob_metadata_store.go b/disperser/common/blobstore/blob_metadata_store.go similarity index 100% rename from disperser/blobstore/blob_metadata_store.go rename to disperser/common/blobstore/blob_metadata_store.go diff --git a/disperser/blobstore/blob_metadata_store_test.go b/disperser/common/blobstore/blob_metadata_store_test.go similarity index 100% rename from disperser/blobstore/blob_metadata_store_test.go rename to disperser/common/blobstore/blob_metadata_store_test.go diff --git a/disperser/blobstore/blobstore_test.go b/disperser/common/blobstore/blobstore_test.go similarity index 97% rename from disperser/blobstore/blobstore_test.go rename to disperser/common/blobstore/blobstore_test.go index 3fb769bad..487b27d9d 100644 --- a/disperser/blobstore/blobstore_test.go +++ b/disperser/common/blobstore/blobstore_test.go @@ -14,7 +14,7 @@ import ( cmock "github.com/Layr-Labs/eigenda/common/mock" "github.com/Layr-Labs/eigenda/core" - "github.com/Layr-Labs/eigenda/disperser/blobstore" + "github.com/Layr-Labs/eigenda/disperser/common/blobstore" "github.com/Layr-Labs/eigenda/inabox/deploy" "github.com/ory/dockertest/v3" ) diff --git a/disperser/blobstore/shared_storage.go b/disperser/common/blobstore/shared_storage.go similarity index 100% rename from disperser/blobstore/shared_storage.go rename to disperser/common/blobstore/shared_storage.go diff --git a/disperser/blobstore/shared_storage_test.go b/disperser/common/blobstore/shared_storage_test.go similarity index 100% rename from disperser/blobstore/shared_storage_test.go rename to disperser/common/blobstore/shared_storage_test.go diff --git a/disperser/inmem/store.go b/disperser/common/inmem/store.go similarity index 100% rename from disperser/inmem/store.go rename to disperser/common/inmem/store.go diff --git a/disperser/inmem/store_test.go b/disperser/common/inmem/store_test.go similarity index 98% rename from disperser/inmem/store_test.go rename to disperser/common/inmem/store_test.go index a8bd37bb0..5dd8067e5 100644 --- a/disperser/inmem/store_test.go +++ b/disperser/common/inmem/store_test.go @@ -7,7 +7,7 @@ import ( "github.com/Layr-Labs/eigenda/core" "github.com/Layr-Labs/eigenda/disperser" - "github.com/Layr-Labs/eigenda/disperser/inmem" + "github.com/Layr-Labs/eigenda/disperser/common/inmem" "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/assert" ) diff --git a/disperser/dataapi/server_test.go b/disperser/dataapi/server_test.go index e4eafdc7b..e8f439d21 100644 --- a/disperser/dataapi/server_test.go +++ b/disperser/dataapi/server_test.go @@ -14,10 +14,10 @@ import ( "github.com/Layr-Labs/eigenda/core" coremock "github.com/Layr-Labs/eigenda/core/mock" "github.com/Layr-Labs/eigenda/disperser" + "github.com/Layr-Labs/eigenda/disperser/common/inmem" "github.com/Layr-Labs/eigenda/disperser/dataapi" prommock "github.com/Layr-Labs/eigenda/disperser/dataapi/prometheus/mock" subgraphmock "github.com/Layr-Labs/eigenda/disperser/dataapi/subgraph/mock" - "github.com/Layr-Labs/eigenda/disperser/inmem" "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" "github.com/consensys/gnark-crypto/ecc/bn254/fp" "github.com/ethereum/go-ethereum/common" diff --git a/disperser/encoder/client.go b/disperser/encoder/client.go index 4bbcd93f1..f741db8a8 100644 --- a/disperser/encoder/client.go +++ b/disperser/encoder/client.go @@ -7,7 +7,7 @@ import ( "github.com/Layr-Labs/eigenda/core" "github.com/Layr-Labs/eigenda/disperser" - pb "github.com/Layr-Labs/eigenda/disperser/proto/protogen/encoder" + pb "github.com/Layr-Labs/eigenda/disperser/api/grpc/encoder" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" ) diff --git a/disperser/encoder/server.go b/disperser/encoder/server.go index 4e0560bd0..e114804a8 100644 --- a/disperser/encoder/server.go +++ b/disperser/encoder/server.go @@ -11,7 +11,7 @@ import ( "github.com/Layr-Labs/eigenda/common/healthcheck" "github.com/Layr-Labs/eigenda/core" "github.com/Layr-Labs/eigenda/disperser" - pb "github.com/Layr-Labs/eigenda/disperser/proto/protogen/encoder" + pb "github.com/Layr-Labs/eigenda/disperser/api/grpc/encoder" "google.golang.org/grpc" "google.golang.org/grpc/reflection" ) diff --git a/disperser/encoder/server_test.go b/disperser/encoder/server_test.go index d6e04413f..c532f4a82 100644 --- a/disperser/encoder/server_test.go +++ b/disperser/encoder/server_test.go @@ -18,7 +18,7 @@ import ( "github.com/Layr-Labs/eigenda/core" "github.com/Layr-Labs/eigenda/core/encoding" coremock "github.com/Layr-Labs/eigenda/core/mock" - pb "github.com/Layr-Labs/eigenda/disperser/proto/protogen/encoder" + pb "github.com/Layr-Labs/eigenda/disperser/api/grpc/encoder" "github.com/Layr-Labs/eigenda/pkg/encoding/kzgEncoder" "github.com/Layr-Labs/eigenda/pkg/kzg/bn254" ) diff --git a/docker-compose-build.yaml b/docker-compose-build.yaml index 9c24799d6..c8cea1fc5 100644 --- a/docker-compose-build.yaml +++ b/docker-compose-build.yaml @@ -3,22 +3,22 @@ services: batcher: build: context: . - dockerfile: disperser/batcher.Dockerfile + dockerfile: disperser/cmd/batcher/Dockerfile image: ghcr.io/layr-labs/eigenda/batcher:${BUILD_TAG:-latest} disperser: build: context: . - dockerfile: disperser/disperser.Dockerfile + dockerfile: disperser/cmd/apiserver/Dockerfile image: ghcr.io/layr-labs/eigenda/disperser:${BUILD_TAG:-latest} encoder: build: context: . - dockerfile: disperser/encoder.Dockerfile + dockerfile: disperser/cmd/encoder/Dockerfile image: ghcr.io/layr-labs/eigenda/encoder:${BUILD_TAG:-latest} retriever: build: context: . - dockerfile: retriever/Dockerfile + dockerfile: retriever/cmd/Dockerfile image: ghcr.io/layr-labs/eigenda/retriever:${BUILD_TAG:-latest} node: build: @@ -28,10 +28,10 @@ services: churner: build: context: . - dockerfile: churner/Dockerfile + dockerfile: churner/cmd/Dockerfile image: ghcr.io/layr-labs/eigenda/churner:${BUILD_TAG:-latest} nodeplugin: build: context: . - dockerfile: node/plugin/Dockerfile + dockerfile: node/plugin/cmd/Dockerfile image: ghcr.io/layr-labs/eigenda/nodeplugin:${BUILD_TAG:-latest} diff --git a/inabox/deploy/codegen/main.go b/inabox/deploy/codegen/main.go index f1141ba26..1781069d0 100644 --- a/inabox/deploy/codegen/main.go +++ b/inabox/deploy/codegen/main.go @@ -8,8 +8,8 @@ import ( "text/template" churner "github.com/Layr-Labs/eigenda/churner/flags" + dis "github.com/Layr-Labs/eigenda/disperser/cmd/apiserver/flags" bat "github.com/Layr-Labs/eigenda/disperser/cmd/batcher/flags" - dis "github.com/Layr-Labs/eigenda/disperser/cmd/disperserserver/flags" enc "github.com/Layr-Labs/eigenda/disperser/cmd/encoder/flags" opr "github.com/Layr-Labs/eigenda/node/flags" retriever "github.com/Layr-Labs/eigenda/retriever/flags" diff --git a/inabox/deploy/localstack.go b/inabox/deploy/localstack.go index 47e29eef4..020f807b6 100644 --- a/inabox/deploy/localstack.go +++ b/inabox/deploy/localstack.go @@ -12,7 +12,7 @@ import ( "github.com/Layr-Labs/eigenda/common/aws" "github.com/Layr-Labs/eigenda/common/store" - "github.com/Layr-Labs/eigenda/disperser/blobstore" + "github.com/Layr-Labs/eigenda/disperser/common/blobstore" "github.com/ory/dockertest/v3" "github.com/ory/dockertest/v3/docker" diff --git a/node/grpc/server_load_test.go b/node/grpc/server_load_test.go index 6f123a572..9dafcb7f7 100644 --- a/node/grpc/server_load_test.go +++ b/node/grpc/server_load_test.go @@ -8,7 +8,7 @@ import ( "github.com/Layr-Labs/eigenda/core" "github.com/Layr-Labs/eigenda/disperser/batcher" - "github.com/Layr-Labs/eigenda/disperser/dispatcher" + dispatcher "github.com/Layr-Labs/eigenda/disperser/batcher/grpc" "github.com/stretchr/testify/assert" ) diff --git a/node/plugin/Dockerfile b/node/plugin/cmd/Dockerfile similarity index 100% rename from node/plugin/Dockerfile rename to node/plugin/cmd/Dockerfile diff --git a/retriever/Dockerfile b/retriever/cmd/Dockerfile similarity index 100% rename from retriever/Dockerfile rename to retriever/cmd/Dockerfile diff --git a/test/integration_test.go b/test/integration_test.go index 63db29864..dbb95439a 100644 --- a/test/integration_test.go +++ b/test/integration_test.go @@ -19,7 +19,7 @@ import ( clientsmock "github.com/Layr-Labs/eigenda/clients/mock" "github.com/Layr-Labs/eigenda/disperser/apiserver" - "github.com/Layr-Labs/eigenda/disperser/dispatcher" + dispatcher "github.com/Layr-Labs/eigenda/disperser/batcher/grpc" "github.com/Layr-Labs/eigenda/disperser/encoder" "github.com/Layr-Labs/eigenda/retriever" retrievermock "github.com/Layr-Labs/eigenda/retriever/mock" @@ -36,7 +36,7 @@ import ( "github.com/Layr-Labs/eigenda/disperser" "github.com/Layr-Labs/eigenda/disperser/batcher" batchermock "github.com/Layr-Labs/eigenda/disperser/batcher/mock" - "github.com/Layr-Labs/eigenda/disperser/inmem" + "github.com/Layr-Labs/eigenda/disperser/common/inmem" dispersermock "github.com/Layr-Labs/eigenda/disperser/mock" "github.com/Layr-Labs/eigenda/node" nodegrpc "github.com/Layr-Labs/eigenda/node/grpc" diff --git a/test/synthetic-test/synthetic_client_test.go b/test/synthetic-test/synthetic_client_test.go index 0bcb21f70..f5851672d 100644 --- a/test/synthetic-test/synthetic_client_test.go +++ b/test/synthetic-test/synthetic_client_test.go @@ -27,7 +27,7 @@ import ( "github.com/Layr-Labs/eigenda/core" "github.com/Layr-Labs/eigenda/core/encoding" coremock "github.com/Layr-Labs/eigenda/core/mock" - encoder_rpc "github.com/Layr-Labs/eigenda/disperser/proto/protogen/encoder" + encoder_rpc "github.com/Layr-Labs/eigenda/disperser/api/grpc/encoder" "github.com/Layr-Labs/eigenda/pkg/encoding/kzgEncoder" gcommon "github.com/ethereum/go-ethereum/common" "github.com/stretchr/testify/assert"