Fixing GetCart for non-existing user
Now GetCart returns an empty cart for non-existing user (user that haven't added anything to the cart before) Added test to cover that Also enhanced windows script for running cart service locally. Now we have two options: - Running the service and redis locally (assuming redis emulator is installed) This is good for easier local debugging and troubleshooting docker_setup local - Running the service and redis in two separate docker containers This is good for better simulation of what will happen in the cloud
This commit is contained in:
parent
289bd4db13
commit
2041bdcb48
3 changed files with 64 additions and 12 deletions
|
@ -69,13 +69,13 @@ namespace cartservice.cartstore
|
||||||
// Access the cart from the cache
|
// Access the cart from the cache
|
||||||
var value = await db.HashGetAsync(userId, CART_FIELD_NAME);
|
var value = await db.HashGetAsync(userId, CART_FIELD_NAME);
|
||||||
|
|
||||||
Hipstershop.Cart cart = null;
|
|
||||||
if (!value.IsNull)
|
if (!value.IsNull)
|
||||||
{
|
{
|
||||||
cart = Hipstershop.Cart.Parser.ParseFrom(value);
|
return Hipstershop.Cart.Parser.ParseFrom(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return cart;
|
// We decided to return empty cart in cases when user wasn't in the cache before
|
||||||
|
return new Hipstershop.Cart();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,16 +1,45 @@
|
||||||
@echo off
|
@echo off
|
||||||
|
|
||||||
|
set ENV=%1
|
||||||
|
|
||||||
|
IF %ENV%==local GOTO local
|
||||||
|
IF %ENV%==docker GOTO docker_local
|
||||||
|
GOTO End1
|
||||||
|
|
||||||
|
:local
|
||||||
set REDIS_PORT=6379
|
set REDIS_PORT=6379
|
||||||
set REDIS_ADDR=172.30.147.193
|
set REDIS_ADDR=localhost:%REDIS_PORT%
|
||||||
set CART_SERVICE_ADDR=127.0.0.1
|
set CART_SERVICE_ADDR=127.0.0.1
|
||||||
set CART_SERVICE_PORT=7070
|
set CART_SERVICE_PORT=7070
|
||||||
|
|
||||||
rem run docker container with redis
|
echo running redis emulator locally on a separate window
|
||||||
rem docker run -d --name=redis -p %REDIS_PORT%:%REDIS_PORT% redis:alpine
|
taskkill /f /im "redis-server.exe"
|
||||||
|
start redis-server
|
||||||
|
|
||||||
rem running locally
|
echo running the cart service locally
|
||||||
dotnet build ..\.
|
dotnet build ..\.
|
||||||
dotnet run --project ../cartservice.csproj start
|
dotnet run --project ../cartservice.csproj start
|
||||||
|
GOTO End1
|
||||||
|
|
||||||
|
:docker_local
|
||||||
|
set REDIS_PORT=6379
|
||||||
|
set REDIS_ADDR=redis:%REDIS_PORT%
|
||||||
|
set CART_SERVICE_ADDR=127.0.0.1
|
||||||
|
set CART_SERVICE_PORT=7070
|
||||||
|
|
||||||
|
echo run docker container with redis
|
||||||
|
docker run -d --name=redis -p %REDIS_PORT%:%REDIS_PORT% redis
|
||||||
|
|
||||||
|
echo building container image for cart service
|
||||||
|
docker build -t cartservice ..\.
|
||||||
|
|
||||||
|
echo run container image for cart service
|
||||||
|
docker run -it --rm -e REDIS_ADDR=%REDIS_ADDR% -e CART_SERVICE_ADDR=%CART_SERVICE_ADDR% -e CART_SERVICE_PORT=%CART_SERVICE_PORT% -p %CART_SERVICE_PORT%:%CART_SERVICE_PORT% cartservice
|
||||||
|
|
||||||
|
GOTO End1
|
||||||
|
|
||||||
|
:End1
|
||||||
|
|
||||||
rem run docker container with cart service
|
rem run docker container with cart service
|
||||||
rem docker run -it --rm -e REDIS_ADDR=%REDIS_ADDR%:%REDIS_PORT% -e CART_SERVICE_ADDR=%CART_SERVICE_ADDR% -e CART_SERVICE_PORT=%CART_SERVICE_PORT% -p %CART_SERVICE_PORT%:%CART_SERVICE_PORT% cartservice
|
rem docker run -it --rm -e REDIS_ADDR=%REDIS_ADDR%:%REDIS_PORT% -e CART_SERVICE_ADDR=%CART_SERVICE_ADDR% -e CART_SERVICE_PORT=%CART_SERVICE_PORT% -p %CART_SERVICE_PORT%:%CART_SERVICE_PORT% cartservice
|
||||||
rem -e GRPC_TRACE=all -e GRPC_VERBOSITY=debug
|
rem -e GRPC_TRACE=all -e GRPC_VERBOSITY=debug
|
||||||
|
|
|
@ -12,6 +12,29 @@ namespace cartservice
|
||||||
private static string serverHostName = "localhost";
|
private static string serverHostName = "localhost";
|
||||||
private static int port = 7070;
|
private static int port = 7070;
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public async Task GetItem_NoAddItemBefore_EmptyCartReturned()
|
||||||
|
{
|
||||||
|
string userId = Guid.NewGuid().ToString();
|
||||||
|
|
||||||
|
// Construct server's Uri
|
||||||
|
string targetUri = $"{serverHostName}:{port}";
|
||||||
|
|
||||||
|
// Create a GRPC communication channel between the client and the server
|
||||||
|
var channel = new Channel(targetUri, ChannelCredentials.Insecure);
|
||||||
|
|
||||||
|
var client = new CartServiceClient(channel);
|
||||||
|
|
||||||
|
var request = new GetCartRequest
|
||||||
|
{
|
||||||
|
UserId = userId,
|
||||||
|
};
|
||||||
|
var cart = await client.GetCartAsync(request);
|
||||||
|
Assert.NotNull(cart);
|
||||||
|
// All grpc objects implement IEquitable, so we can compare equality with by-value semantics
|
||||||
|
Assert.Equal(new Cart(), cart);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public async Task AddItem_ItemInserted()
|
public async Task AddItem_ItemInserted()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue