aboutsummaryrefslogtreecommitdiff
path: root/test/mq/Makefile
blob: da5ebd1bd32407b953ce310c30cee2253a6dbbaa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
# SeaweedFS Message Queue Test Makefile

# Build configuration
GO_BUILD_CMD=go build -o bin/$(1) $(2)
GO_RUN_CMD=go run $(1) $(2)

# Default values
AGENT_ADDR?=localhost:16777
TOPIC_NAMESPACE?=test
TOPIC_NAME?=test-topic
PARTITION_COUNT?=4
MESSAGE_COUNT?=100
CONSUMER_GROUP?=test-consumer-group
CONSUMER_INSTANCE?=test-consumer-1

# Create bin directory
$(shell mkdir -p bin)

.PHONY: all build clean producer consumer test help

all: build

# Build targets
build: build-producer build-consumer

build-producer:
	@echo "Building producer..."
	$(call GO_BUILD_CMD,producer,./producer)

build-consumer:
	@echo "Building consumer..."
	$(call GO_BUILD_CMD,consumer,./consumer)

# Run targets
producer: build-producer
	@echo "Starting producer..."
	./bin/producer \
		-agent=$(AGENT_ADDR) \
		-namespace=$(TOPIC_NAMESPACE) \
		-topic=$(TOPIC_NAME) \
		-partitions=$(PARTITION_COUNT) \
		-messages=$(MESSAGE_COUNT) \
		-publisher=test-producer \
		-size=1024 \
		-interval=100ms

consumer: build-consumer
	@echo "Starting consumer..."
	./bin/consumer \
		-agent=$(AGENT_ADDR) \
		-namespace=$(TOPIC_NAMESPACE) \
		-topic=$(TOPIC_NAME) \
		-group=$(CONSUMER_GROUP) \
		-instance=$(CONSUMER_INSTANCE) \
		-max-partitions=10 \
		-window-size=100 \
		-offset=latest \
		-show-messages=true \
		-log-progress=true

# Run producer directly with go run
run-producer:
	@echo "Running producer directly..."
	$(call GO_RUN_CMD,./producer, \
		-agent=$(AGENT_ADDR) \
		-namespace=$(TOPIC_NAMESPACE) \
		-topic=$(TOPIC_NAME) \
		-partitions=$(PARTITION_COUNT) \
		-messages=$(MESSAGE_COUNT) \
		-publisher=test-producer \
		-size=1024 \
		-interval=100ms)

# Run consumer directly with go run
run-consumer:
	@echo "Running consumer directly..."
	$(call GO_RUN_CMD,./consumer, \
		-agent=$(AGENT_ADDR) \
		-namespace=$(TOPIC_NAMESPACE) \
		-topic=$(TOPIC_NAME) \
		-group=$(CONSUMER_GROUP) \
		-instance=$(CONSUMER_INSTANCE) \
		-max-partitions=10 \
		-window-size=100 \
		-offset=latest \
		-show-messages=true \
		-log-progress=true)

# Test scenarios
test: test-basic

test-basic: build
	@echo "Running basic producer/consumer test..."
	@echo "1. Starting consumer in background..."
	./bin/consumer \
		-agent=$(AGENT_ADDR) \
		-namespace=$(TOPIC_NAMESPACE) \
		-topic=$(TOPIC_NAME) \
		-group=$(CONSUMER_GROUP) \
		-instance=$(CONSUMER_INSTANCE) \
		-offset=earliest \
		-show-messages=false \
		-log-progress=true & \
	CONSUMER_PID=$$!; \
	echo "Consumer PID: $$CONSUMER_PID"; \
	sleep 2; \
	echo "2. Starting producer..."; \
	./bin/producer \
		-agent=$(AGENT_ADDR) \
		-namespace=$(TOPIC_NAMESPACE) \
		-topic=$(TOPIC_NAME) \
		-partitions=$(PARTITION_COUNT) \
		-messages=$(MESSAGE_COUNT) \
		-publisher=test-producer \
		-size=1024 \
		-interval=50ms; \
	echo "3. Waiting for consumer to process messages..."; \
	sleep 5; \
	echo "4. Stopping consumer..."; \
	kill $$CONSUMER_PID || true; \
	echo "Test completed!"

test-performance: build
	@echo "Running performance test..."
	@echo "1. Starting consumer in background..."
	./bin/consumer \
		-agent=$(AGENT_ADDR) \
		-namespace=$(TOPIC_NAMESPACE) \
		-topic=perf-test \
		-group=perf-consumer-group \
		-instance=perf-consumer-1 \
		-offset=earliest \
		-show-messages=false \
		-log-progress=true & \
	CONSUMER_PID=$$!; \
	echo "Consumer PID: $$CONSUMER_PID"; \
	sleep 2; \
	echo "2. Starting high-throughput producer..."; \
	./bin/producer \
		-agent=$(AGENT_ADDR) \
		-namespace=$(TOPIC_NAMESPACE) \
		-topic=perf-test \
		-partitions=8 \
		-messages=1000 \
		-publisher=perf-producer \
		-size=512 \
		-interval=10ms; \
	echo "3. Waiting for consumer to process messages..."; \
	sleep 10; \
	echo "4. Stopping consumer..."; \
	kill $$CONSUMER_PID || true; \
	echo "Performance test completed!"

test-multiple-consumers: build
	@echo "Running multiple consumers test..."
	@echo "1. Starting multiple consumers in background..."
	./bin/consumer \
		-agent=$(AGENT_ADDR) \
		-namespace=$(TOPIC_NAMESPACE) \
		-topic=multi-test \
		-group=multi-consumer-group \
		-instance=consumer-1 \
		-offset=earliest \
		-show-messages=false \
		-log-progress=true & \
	CONSUMER1_PID=$$!; \
	./bin/consumer \
		-agent=$(AGENT_ADDR) \
		-namespace=$(TOPIC_NAMESPACE) \
		-topic=multi-test \
		-group=multi-consumer-group \
		-instance=consumer-2 \
		-offset=earliest \
		-show-messages=false \
		-log-progress=true & \
	CONSUMER2_PID=$$!; \
	echo "Consumer PIDs: $$CONSUMER1_PID, $$CONSUMER2_PID"; \
	sleep 2; \
	echo "2. Starting producer..."; \
	./bin/producer \
		-agent=$(AGENT_ADDR) \
		-namespace=$(TOPIC_NAMESPACE) \
		-topic=multi-test \
		-partitions=8 \
		-messages=200 \
		-publisher=multi-producer \
		-size=256 \
		-interval=50ms; \
	echo "3. Waiting for consumers to process messages..."; \
	sleep 10; \
	echo "4. Stopping consumers..."; \
	kill $$CONSUMER1_PID $$CONSUMER2_PID || true; \
	echo "Multiple consumers test completed!"

# Clean up
clean:
	@echo "Cleaning up..."
	rm -rf bin/
	go clean -cache

# Help
help:
	@echo "SeaweedFS Message Queue Test Makefile"
	@echo ""
	@echo "Usage:"
	@echo "  make build              - Build producer and consumer binaries"
	@echo "  make producer          - Run producer (builds first)"
	@echo "  make consumer          - Run consumer (builds first)"
	@echo "  make run-producer      - Run producer directly with go run"
	@echo "  make run-consumer      - Run consumer directly with go run"
	@echo "  make test              - Run basic producer/consumer test"
	@echo "  make test-performance  - Run performance test"
	@echo "  make test-multiple-consumers - Run multiple consumers test"
	@echo "  make clean             - Clean up build artifacts"
	@echo ""
	@echo "Configuration (set via environment variables):"
	@echo "  AGENT_ADDR=10.21.152.113:16777  - MQ agent address"
	@echo "  TOPIC_NAMESPACE=test            - Topic namespace"
	@echo "  TOPIC_NAME=test-topic           - Topic name"
	@echo "  PARTITION_COUNT=4               - Number of partitions"
	@echo "  MESSAGE_COUNT=100               - Number of messages to produce"
	@echo "  CONSUMER_GROUP=test-consumer-group - Consumer group name"
	@echo "  CONSUMER_INSTANCE=test-consumer-1  - Consumer instance ID"
	@echo ""
	@echo "Examples:"
	@echo "  make producer MESSAGE_COUNT=1000 PARTITION_COUNT=8"
	@echo "  make consumer CONSUMER_GROUP=my-group"
	@echo "  make test AGENT_ADDR=10.21.152.113:16777 MESSAGE_COUNT=500"