-
Customers enter, place orders, and only have so much patience for a busy line. Each customer gets in line, but they will leave if they need to wait too long for their order.
-
Barista's fulfill orders to the best of their abilities. Their abilities range from 1.0 (which is perfect ability) to higher numbers which are multiples of the optimal drink preparation time.
-
The store manager ensure that inventory is properly stocked and accounted for.
The preferred way to run the program is after running go build
in the
package.
./coffee-shop
main.go:30: please specify number, in seconds, for envvar COFFEE_SHOP_CLOSE_TIME
main.go:35: please specify number, in seconds, for envvar COFFEE_SHOP_SHUTDOWN
main.go:40: please specify number of customers for envvar COFFEE_SHOP_CUSTOMERS
main.go:45: please specify number of baristas for envvar COFFEE_SHOP_BARISTAS
The program requires 4 environment variables to be set before simulating a coffee shop. Below is an example run of the program.
COFFEE_SHOP_CLOSE_TIME=60 COFFEE_SHOP_SHUTDOWN=5 COFFEE_SHOP_CUSTOMERS=50 COFFEE_SHOP_BARISTAS=2 ./coffee-shop
store.go:65: Customer 1 says Yum and thanks to Barista 1
store.go:65: Customer 2 says Yum and thanks to Barista 2
store.go:65: Customer 3 says Yum and thanks to Barista 1
^Cmain.go:63: I received a signal to close the store
store.go:65: Customer 5 says Yum and thanks to Barista 1
store.go:54: Store is closing
store.go:65: Customer 4 says Yum and thanks to Barista 2
store.go:65: Customer 6 says Yum and thanks to Barista 1
main.go:70: Store closed
COFFEE_SHOP_CLOSE_TIME=60
means that the coffee shop is serving
customers for 60 seconds.
COFFEE_SHOP_SHUTDOWN=5
means that the coffee shop tries to complete
serving existing customers for 5 seconds after the store closes.
COFFEE_SHOP_CUSTOMERS=50
indicates there are 50 customers trying to be
coffee in the shop.
COFFEE_SHOP_BARISTAS=2
indicates the number of baristas working on
making drinks. Each barista can only make one drink at a time.
You can run the tests with this command:
go test -cover -race -v
=== RUN TestBadEnv
--- PASS: TestBadEnv (0.00s)
=== RUN TestStore
--- PASS: TestStore (1.00s)
=== RUN TestSignalStore
--- PASS: TestSignalStore (1.01s)
=== RUN TestSignalStoreShutdownTimeout
--- PASS: TestSignalStoreShutdownTimeout (2.01s)
=== RUN TestCantOpenStore
--- PASS: TestCantOpenStore (0.00s)
PASS
coverage: 100.0% of statements
ok _/Users/vasko/code/coffee-shop 5.037s
The tests are run by calling func main
to test the entire functionality of
the program end-to-end.