Coder Social home page Coder Social logo

grill's Introduction

Grill - A test framework for functional validation of golang microservices

Background

The behavior of any system should be tested only from the user's perspective, as if its done without any knowledge of its internal implementation, i.e. the System Under Test(SUT) should be a black box for the test. In the test we call the public API of the SUT, validate the response and any outgoing requests/messages.

This decouples the test from the actual system and allows us to change the implementation without any change in the test cases.

All tests, be it unit tests, service level tests or end to end integration tests, should follow the same methodology, only the SUT changes in all cases.

test

Motivation

With rapid adoption of microservices architecture at Swiggy, we realized the limitation of unit tests. Especially for I/O bound microservice which typically engage in data transformation, interaction with downstream dependencies and infrastructural components (e.g. database, queues, cache etc.) to implement business logic, unit tests have limited value. It was more important to test the API surface of the microservice with all of its infrastructure components such that the complete behaviour of the microservice can be validated. In this type of test, the microservices along with its infrastructure dependencies in installed locally and the test client invokes the public APIs and validates output via both API response and via storage layer validation(e.g. checking the output of a queue). We coined a term for this type of test - Service Level Testing (SLT).

While individual microservices could develop their own test framework along with mocking, container management for infra components, we developed a utility that drastically reduced the cost of writing SLT test cases. Once the tool was widely adopted within Swiggy, we decided to open source this tool to give back to the community and solicit more contributions.

Grill

Grill is a SLT framework which extends the above principle and provides a declarative way for writing service level tests. The core framework defines a TestCase struct with interfaces for stubs, assertions and cleaners.

type Stub interface {
	Stub() error
}

type Assertion interface {
	Assert() error
}

type Cleaner interface {
	Clean() error
}

type TestCase struct {
	Name       string
	Stubs      []Stub              // Setup all mocks, stubs etc. Inject them as required. 
	Action     func() interface{}  // Call the public API of the SUT (http call, kafka publish etc) 
	Assertions []Assertion         // Validate the response received, outgoing requests made. 
	Cleaners   []Cleaner           // Undo all the mocks and reset the state for the next test.

}

The core framework can be used for any type of tests, we just have to provide required implementations of stubs, assertions and cleaners.

But since the library was built for aiding in service level tests, it provides helpers(stubs, assertions, cleaners implementations) for commonly used infra dependencies like dynamodb, redis, grpc/http downstreams, kafka etc out of the box.

It uses testcontainers-go underneath for dockers.

Supported Features

Grill Stubs Assertions Cleaners
HTTP (wiremock) Stub, StubFromJSON, StubFromFile AssertCount ResetAllStubs
GRPC Stub AssertCount ResetAllStubs
DynamoDB CreateTable, SeedDataFromFile, PutItem AssertScanCount, AssertItem DeleteTable, DeleteItem
Kafka CreateTopics AssertCount, AssertMessageCount DeleteTopics
Redis SelectDB, Set AssertValue FlushDB
Clustered Redis Set AssertValue FlushDB
Mysql CreateTable, SeedFromCSVFile AssertCount DeleteTable
S3 (minio) CreateBucket, UploadFile AssertFileExists DeleteBucket, DeleteAllFiles
Tile38 SetObject AssertObject FlushDB
Consul SeedFromCSVFile, Set AssertValue DeleteAllKeys
SQS CreateQueue AssertCount, AssertMessageCount DeleteQueues
ES CreateIndex, PutItem AssertItemsCount DeleteIndices, DeleteItem

Getting Started

Check the Wiki page for getting started with Grill

Why write functional tests at all ??


Ans: umbrella

grill's People

Contributors

amit-shekhar avatar nileshkadamawg avatar amartya-1 avatar yatinsharma-swiggy avatar ramnagesh1 avatar lovlin-thakkar avatar prathipatikarthik avatar svijay-anand avatar

Stargazers

Anurag avatar Abhishek Kumar avatar Anurag Kar avatar  avatar Sagar Kanojia avatar Yao avatar Ravi Chandora avatar Mudit Raaj Gupta avatar

Watchers

 avatar

grill's Issues

Not able to use on Mac

Starting: /Users/shriprasadmarathe/go/bin/dlv dap --check-go-version=false --listen=127.0.0.1:51751 --log-dest=3 from /Users/shriprasadmarathe/workspace/grill_tutorial
DAP server listening at: 127.0.0.1:51751
Build Error: go test -c -o /Users/shriprasadmarathe/workspace/grill_tutorial/__debug_bin -gcflags all=-N -l .

github.com/confluentinc/confluent-kafka-go/kafka

ld: warning: ignoring file ../../go/pkg/mod/github.com/confluentinc/[email protected]/kafka/librdkafka_vendor/librdkafka_darwin.a, building for macOS-arm64 but attempting to link with file built for macOS-x86_64
Undefined symbols for architecture arm64:
"_rd_kafka_AdminOptions_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_AdminOptions_destroy in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_AdminOptions_destroy)
"_rd_kafka_AdminOptions_new", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_AdminOptions_new in _x004.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_AdminOptions_new)
"_rd_kafka_AdminOptions_set_operation_timeout", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_AdminOptions_set_operation_timeout in _x004.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_AdminOptions_set_operation_timeout)
"_rd_kafka_AdminOptions_set_request_timeout", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_AdminOptions_set_request_timeout in _x004.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_AdminOptions_set_request_timeout)
"_rd_kafka_AdminOptions_set_validate_only", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_AdminOptions_set_validate_only in _x004.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_AdminOptions_set_validate_only)
"_rd_kafka_AlterConfigs", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_AlterConfigs in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_AlterConfigs, __cgo_497ae96c6da8_Cfunc_rd_kafka_AlterConfigs_result_resources )
"_rd_kafka_AlterConfigs_result_resources", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_AlterConfigs_result_resources in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_AlterConfigs_result_resources)
"_rd_kafka_ConfigEntry_is_read_only", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigEntry_is_read_only in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigEntry_is_read_only)
"_rd_kafka_ConfigEntry_is_sensitive", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigEntry_is_sensitive in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigEntry_is_sensitive)
"_rd_kafka_ConfigEntry_is_synonym", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigEntry_is_synonym in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigEntry_is_synonym)
"_rd_kafka_ConfigEntry_name", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigEntry_name in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigEntry_name)
"_rd_kafka_ConfigEntry_source", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigEntry_source in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigEntry_source)
"_rd_kafka_ConfigEntry_synonyms", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigEntry_synonyms in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigEntry_synonyms)
"_rd_kafka_ConfigEntry_value", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigEntry_value in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigEntry_value)
"_rd_kafka_ConfigResource_configs", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_configs in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_configs)
"_rd_kafka_ConfigResource_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_destroy in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_destroy)
"_rd_kafka_ConfigResource_error", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_error in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_error, __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_error_string )
"_rd_kafka_ConfigResource_error_string", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_error_string in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_error_string)
"_rd_kafka_ConfigResource_name", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_name in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_name)
"_rd_kafka_ConfigResource_new", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_new in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_new)
"_rd_kafka_ConfigResource_set_config", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_set_config in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_set_config)
"_rd_kafka_ConfigResource_type", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_type in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigResource_type)
"_rd_kafka_ConfigSource_name", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigSource_name in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ConfigSource_name)
"_rd_kafka_CreatePartitions", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_CreatePartitions in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_CreatePartitions_result_topics, __cgo_497ae96c6da8_Cfunc_rd_kafka_CreatePartitions )
"_rd_kafka_CreatePartitions_result_topics", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_CreatePartitions_result_topics in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_CreatePartitions_result_topics)
"_rd_kafka_CreateTopics", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_CreateTopics in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_CreateTopics_result_topics, __cgo_497ae96c6da8_Cfunc_rd_kafka_CreateTopics )
"_rd_kafka_CreateTopics_result_topics", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_CreateTopics_result_topics in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_CreateTopics_result_topics)
"_rd_kafka_DeleteTopic_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_DeleteTopic_destroy in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_DeleteTopic_destroy)
"_rd_kafka_DeleteTopic_new", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_DeleteTopic_new in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_DeleteTopic_new)
"_rd_kafka_DeleteTopics", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_DeleteTopics in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_DeleteTopics_result_topics, __cgo_497ae96c6da8_Cfunc_rd_kafka_DeleteTopics )
"_rd_kafka_DeleteTopics_result_topics", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_DeleteTopics_result_topics in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_DeleteTopics_result_topics)
"_rd_kafka_DescribeConfigs", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_DescribeConfigs in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_DescribeConfigs_result_resources, __cgo_497ae96c6da8_Cfunc_rd_kafka_DescribeConfigs )
"_rd_kafka_DescribeConfigs_result_resources", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_DescribeConfigs_result_resources in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_DescribeConfigs_result_resources)
"_rd_kafka_NewPartitions_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_NewPartitions_destroy in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_NewPartitions_destroy)
"_rd_kafka_NewPartitions_new", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_NewPartitions_new in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_NewPartitions_new)
"_rd_kafka_NewPartitions_set_replica_assignment", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_NewPartitions_set_replica_assignment in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_NewPartitions_set_replica_assignment)
"_rd_kafka_NewTopic_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_NewTopic_destroy in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_NewTopic_destroy)
"_rd_kafka_NewTopic_new", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_NewTopic_new in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_NewTopic_new)
"_rd_kafka_NewTopic_set_config", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_NewTopic_set_config in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_NewTopic_set_config)
"_rd_kafka_NewTopic_set_replica_assignment", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_NewTopic_set_replica_assignment in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_NewTopic_set_replica_assignment)
"_rd_kafka_ResourceType_name", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_ResourceType_name in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_ResourceType_name)
"_rd_kafka_abort_transaction", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_abort_transaction in _x020.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_abort_transaction)
"_rd_kafka_assign", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_assign in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_assignment_lost, __cgo_497ae96c6da8_Cfunc_rd_kafka_assignment , __cgo_497ae96c6da8_Cfunc_rd_kafka_assign )
"_rd_kafka_assignment", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_assignment in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_assignment_lost, __cgo_497ae96c6da8_Cfunc_rd_kafka_assignment )
"_rd_kafka_assignment_lost", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_assignment_lost in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_assignment_lost)
"_rd_kafka_begin_transaction", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_begin_transaction in _x020.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_begin_transaction)
"_rd_kafka_clusterid", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_clusterid in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_clusterid)
"_rd_kafka_commit_queue", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_commit_queue in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_commit_queue)
"_rd_kafka_commit_transaction", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_commit_transaction in _x020.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_commit_transaction)
"_rd_kafka_committed", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_committed in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_committed)
"_rd_kafka_conf_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_conf_destroy in _x006.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_conf_destroy)
"_rd_kafka_conf_new", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_conf_new in _x006.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_conf_new)
"_rd_kafka_conf_set", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_conf_set in _x006.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_conf_set_default_topic_conf, __cgo_497ae96c6da8_Cfunc_rd_kafka_conf_set , __cgo_497ae96c6da8_Cfunc_rd_kafka_conf_set_events )
"_rd_kafka_conf_set_default_topic_conf", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_conf_set_default_topic_conf in _x006.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_conf_set_default_topic_conf)
"_rd_kafka_conf_set_events", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_conf_set_events in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_conf_set_events)
"_rd_kafka_consumer_close", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_close in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_close)
"_rd_kafka_consumer_group_metadata", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_group_metadata in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_group_metadata_write, __cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_group_metadata , __cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_group_metadata_read , __cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_group_metadata_destroy , __cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_group_metadata_new )
"_rd_kafka_consumer_group_metadata_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_group_metadata_destroy in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_group_metadata_destroy)
"_rd_kafka_consumer_group_metadata_new", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_group_metadata_new in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_group_metadata_new)
"_rd_kafka_consumer_group_metadata_read", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_group_metadata_read in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_group_metadata_read)
"_rd_kafka_consumer_group_metadata_write", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_group_metadata_write in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_consumer_group_metadata_write)
"_rd_kafka_controllerid", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_controllerid in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_controllerid)
"_rd_kafka_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_destroy in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_destroy)
"_rd_kafka_err2name", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_err2name in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_err2name)
"_rd_kafka_err2str", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_err2str in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_err2str)
"_rd_kafka_error_code", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_error_code in _x008.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_error_code)
"_rd_kafka_error_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_error_destroy in _x008.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_error_destroy)
"_rd_kafka_error_is_fatal", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_error_is_fatal in _x008.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_error_is_fatal)
"_rd_kafka_error_is_retriable", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_error_is_retriable in _x008.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_error_is_retriable)
"_rd_kafka_error_string", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_error_string in _x008.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_error_string)
"_rd_kafka_error_txn_requires_abort", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_error_txn_requires_abort in _x008.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_error_txn_requires_abort)
"_rd_kafka_event_AlterConfigs_result", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_AlterConfigs_result in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_AlterConfigs_result)
"_rd_kafka_event_CreatePartitions_result", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_CreatePartitions_result in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_CreatePartitions_result)
"_rd_kafka_event_CreateTopics_result", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_CreateTopics_result in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_CreateTopics_result)
"_rd_kafka_event_DeleteTopics_result", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_DeleteTopics_result in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_DeleteTopics_result)
"_rd_kafka_event_DescribeConfigs_result", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_DescribeConfigs_result in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_DescribeConfigs_result)
"_rd_kafka_event_config_string", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_config_string in _x010.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_config_string)
"_rd_kafka_event_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_destroy in _x003.o
__rk_queue_poll in _x010.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_destroy)
"_rd_kafka_event_error", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_error in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_error_is_fatal, __cgo_497ae96c6da8_Cfunc_rd_kafka_event_error , __cgo_497ae96c6da8_Cfunc_rd_kafka_event_error_string )
"_rd_kafka_event_error_is_fatal", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_error_is_fatal in _x010.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_error_is_fatal)
"_rd_kafka_event_error_string", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_error_string in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_error_string)
"_rd_kafka_event_log", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_log in _x015.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_log)
"_rd_kafka_event_message_array", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_message_array in _x010.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_message_array)
"_rd_kafka_event_message_count", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_message_count in _x010.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_message_count)
"_rd_kafka_event_message_next", referenced from:
__rk_queue_poll in _x010.o
"_rd_kafka_event_name", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_name in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_name)
"_rd_kafka_event_stats", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_stats in _x010.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_stats)
"_rd_kafka_event_topic_partition", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_topic_partition in _x010.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_topic_partition, __cgo_497ae96c6da8_Cfunc_rd_kafka_event_topic_partition_list )
"_rd_kafka_event_topic_partition_list", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_topic_partition_list in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_topic_partition_list)
"_rd_kafka_event_type", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_event_type in _x003.o
__rk_queue_poll in _x010.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_event_type)
"_rd_kafka_fatal_error", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_fatal_error in _x008.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_fatal_error)
"_rd_kafka_get_err_descs", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_get_err_descs in _x009.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_get_err_descs)
"_rd_kafka_get_watermark_offsets", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_get_watermark_offsets in _x017.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_get_watermark_offsets)
"_rd_kafka_header_add", referenced from:
_tmphdrs_to_chdrs in _x020.o
"_rd_kafka_header_cnt", referenced from:
_chdrs_to_tmphdrs in _x010.o
"_rd_kafka_header_get_all", referenced from:
_chdrs_to_tmphdrs in _x010.o
"_rd_kafka_headers_destroy", referenced from:
_do_produce in _x020.o
"_rd_kafka_headers_new", referenced from:
_tmphdrs_to_chdrs in _x020.o
"_rd_kafka_incremental_assign", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_incremental_assign in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_incremental_assign)
"_rd_kafka_incremental_unassign", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_incremental_unassign in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_incremental_unassign)
"_rd_kafka_init_transactions", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_init_transactions in _x020.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_init_transactions)
"_rd_kafka_last_error", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_last_error in _x012.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_last_error)
"_rd_kafka_mem_free", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_mem_free in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_mem_free)
"_rd_kafka_message_headers", referenced from:
_chdrs_to_tmphdrs in _x010.o
"_rd_kafka_message_timestamp", referenced from:
__rk_queue_poll in _x010.o
"_rd_kafka_metadata", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_metadata in _x017.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_metadata, __cgo_497ae96c6da8_Cfunc_rd_kafka_metadata_destroy )
"_rd_kafka_metadata_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_metadata_destroy in _x017.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_metadata_destroy)
"_rd_kafka_name", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_name in _x012.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_name)
"_rd_kafka_new", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_new in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_new)
"_rd_kafka_oauthbearer_set_token", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_oauthbearer_set_token in _x012.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_oauthbearer_set_token, __cgo_497ae96c6da8_Cfunc_rd_kafka_oauthbearer_set_token_failure )
"_rd_kafka_oauthbearer_set_token_failure", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_oauthbearer_set_token_failure in _x012.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_oauthbearer_set_token_failure)
"_rd_kafka_offsets_for_times", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_offsets_for_times in _x019.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_offsets_for_times)
"_rd_kafka_offsets_store", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_offsets_store in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_offsets_store)
"_rd_kafka_outq_len", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_outq_len in _x020.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_outq_len)
"_rd_kafka_pause_partitions", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_pause_partitions in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_pause_partitions)
"_rd_kafka_poll_set_consumer", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_poll_set_consumer in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_poll_set_consumer)
"_rd_kafka_position", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_position in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_position)
"_rd_kafka_produce_batch", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_produce_batch in _x020.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_produce_batch)
"_rd_kafka_producev", referenced from:
_do_produce in _x020.o
"_rd_kafka_purge", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_purge in _x020.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_purge)
"_rd_kafka_query_watermark_offsets", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_query_watermark_offsets in _x017.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_query_watermark_offsets)
"_rd_kafka_queue_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_queue_destroy in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_queue_destroy)
"_rd_kafka_queue_get_consumer", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_queue_get_consumer in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_queue_get_consumer)
"_rd_kafka_queue_get_main", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_queue_get_main in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_queue_get_main)
"_rd_kafka_queue_length", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_queue_length in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_queue_length)
"_rd_kafka_queue_new", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_queue_new in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_queue_new)
"_rd_kafka_queue_poll", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_queue_poll in _x003.o
__rk_queue_poll in _x010.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_queue_poll)
"_rd_kafka_rebalance_protocol", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_rebalance_protocol in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_rebalance_protocol)
"_rd_kafka_resume_partitions", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_resume_partitions in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_resume_partitions)
"_rd_kafka_seek", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_seek in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_seek)
"_rd_kafka_send_offsets_to_transaction", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_send_offsets_to_transaction in _x020.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_send_offsets_to_transaction)
"_rd_kafka_set_log_queue", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_set_log_queue in _x012.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_set_log_queue)
"_rd_kafka_subscribe", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_subscribe in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_subscribe)
"_rd_kafka_subscription", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_subscription in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_subscription)
"_rd_kafka_test_fatal_error", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_test_fatal_error in _x008.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_test_fatal_error)
"_rd_kafka_topic_conf_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_topic_conf_destroy in _x006.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_topic_conf_destroy)
"_rd_kafka_topic_conf_new", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_topic_conf_new in _x006.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_topic_conf_new)
"_rd_kafka_topic_conf_set", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_topic_conf_set in _x006.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_topic_conf_set)
"_rd_kafka_topic_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_topic_destroy in _x012.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_topic_destroy)
"_rd_kafka_topic_name", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_topic_name in _x012.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_topic_name)
"_rd_kafka_topic_new", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_topic_new in _x012.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_topic_new)
"_rd_kafka_topic_partition_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_topic_partition_destroy in _x010.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_topic_partition_destroy)
"_rd_kafka_topic_partition_list_add", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_topic_partition_list_add in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_topic_partition_list_add)
"_rd_kafka_topic_partition_list_destroy", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_topic_partition_list_destroy in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_topic_partition_list_destroy)
"_rd_kafka_topic_partition_list_new", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_topic_partition_list_new in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_topic_partition_list_new)
"_rd_kafka_topic_result_error", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_topic_result_error in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_topic_result_error_string, __cgo_497ae96c6da8_Cfunc_rd_kafka_topic_result_error )
"_rd_kafka_topic_result_error_string", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_topic_result_error_string in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_topic_result_error_string)
"_rd_kafka_topic_result_name", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_topic_result_name in _x003.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_topic_result_name)
"_rd_kafka_unsubscribe", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_unsubscribe in _x007.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_unsubscribe)
"_rd_kafka_version", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_version in _x014.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_version, __cgo_497ae96c6da8_Cfunc_rd_kafka_version_str )
"_rd_kafka_version_str", referenced from:
__cgo_497ae96c6da8_Cfunc_rd_kafka_version_str in _x009.o
(maybe you meant: __cgo_497ae96c6da8_Cfunc_rd_kafka_version_str)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation) (exit status 2)

Unable to download module

go get github.com/Swiggy/grill
go: github.com/Swiggy/[email protected]: parsing go.mod:
module declares its path as: github.com/swiggy-private/grill
but was required as: github.com/Swiggy/grill

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.