Skip to content

Commit

Permalink
Public api and other missing build fixes (#2)
Browse files Browse the repository at this point in the history
* Public API analyzer

* Code docs

* Enabled test coverage

* Test native AOT rename
  • Loading branch information
mtmk authored Jul 30, 2024
1 parent ad381eb commit 4910dd4
Show file tree
Hide file tree
Showing 73 changed files with 4,059 additions and 599 deletions.
12 changes: 10 additions & 2 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,15 @@ csharp_space_between_parentheses = false
csharp_space_between_square_brackets = false

# License header
file_header_template = Licensed to the .NET Foundation under one or more agreements.\nThe .NET Foundation licenses this file to you under the MIT license.
file_header_template = Copyright (c) The NATS Authors.\nLicensed under the Apache License, Version 2.0.
stylecop.documentation.xmlHeader = false

dotnet_diagnostic.SA1101.severity = none # Prefix local calls with this
dotnet_diagnostic.SA1309.severity = none # Field names must not begin with underscore

[**/Models/*.cs]
dotnet_diagnostic.CS8618.severity = none # Non-nullable property must contain a non-null value when exiting constructor


# C++ Files
[*.{cpp,h,in}]
Expand Down Expand Up @@ -187,4 +195,4 @@ indent_size = 2
[*.sh]
end_of_line = lf
[*.{cmd,bat}]
end_of_line = crlf
end_of_line = crlf
25 changes: 12 additions & 13 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,26 +62,25 @@ jobs:
# https://github.com/MarcoRossignoli/coverlet/blob/master/Documentation/KnownIssues.md#tests-fail-if-assembly-is-strong-named
run: dotnet test --no-build --logger:"console;verbosity=normal" --collect:"XPlat Code Coverage" --settings Default.runsettings -- RunConfiguration.DisableAppDomain=true

# TODO: Enable code coverage upload
# - name: Upload coverage reports to Codecov
# # PRs from external contributors fail: https://github.com/codecov/feedback/issues/301
# # Only upload coverage reports for PRs from the same repo (not forks)
# if: github.event.pull_request.head.repo.full_name == github.repository || github.ref == 'refs/heads/main'
# uses: codecov/[email protected]
# with:
# token: ${{ secrets.CODECOV_TOKEN }}

- name: Check Native AOT
- name: Upload coverage reports to Codecov
# PRs from external contributors fail: https://github.com/codecov/feedback/issues/301
# Only upload coverage reports for PRs from the same repo (not forks)
if: github.event.pull_request.head.repo.full_name == github.repository || github.ref == 'refs/heads/main'
uses: codecov/[email protected]
with:
token: ${{ secrets.CODECOV_TOKEN }}

- name: Test Native AOT
shell: bash
run: |
echo ">> Set up for AOT compilation..."
export exe_file=NATS.Jwt.CheckNativeAot
export exe_file=NATS.Jwt.TestNativeAot
export exe_type=ELF
export dotnet_runtime_id=linux-x64
echo ">> Checking OS..."
if [ "${{ matrix.os }}" = "windows-latest" ]; then
export exe_file=NATS.Jwt.CheckNativeAot.exe
export exe_file=NATS.Jwt.TestNativeAot.exe
export exe_type=PE32
export dotnet_runtime_id=win-x64
elif [ "${{ matrix.os }}" = "macos-latest" ]; then
Expand All @@ -90,7 +89,7 @@ jobs:
fi
echo ">> Publishing..."
cd NATS.Jwt.CheckNativeAot
cd NATS.Jwt.TestNativeAot
rm -rf bin obj
dotnet publish -r $dotnet_runtime_id -c Release -o dist | tee output.txt
Expand Down
4 changes: 0 additions & 4 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,9 @@
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<NoWarn>$(NoWarn);CS1591;SA0001</NoWarn>
<SignAssembly>true</SignAssembly>
<AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)NATS.Jwt.snk</AssemblyOriginatorKeyFile>
<IsPackable>false</IsPackable>

<!-- TODO: remove no-warn -->
<NoWarn>$(NoWarn),CS8618,SA1600,SA1633,SA1101,SA1402,SA1629,SA1623,SA1309,SA1601,SA1633,SA1649,SA1503</NoWarn>
</PropertyGroup>

<ItemGroup>
Expand Down
27 changes: 27 additions & 0 deletions NATS.Jwt.TestNativeAot/Assert.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright (c) The NATS Authors.
// Licensed under the Apache License, Version 2.0.

namespace NATS.Jwt.TestNativeAot;

/// <summary>
/// The Assert class provides methods for performing assertions in tests.
/// </summary>
public static class Assert
{
/// <summary>
/// Checks if two strings are equal.
/// </summary>
/// <param name="expected">The first string to compare.</param>
/// <param name="actual">The second string to compare.</param>
/// <param name="name">The name of the comparison for error reporting.</param>
/// <exception cref="Exception">Thrown when the strings are not equal.</exception>
public static void Equal(string expected, string actual, string name)
{
if (!string.Equals(expected, actual))
{
throw new Exception($"Strings are not equal ({name}).\n---\nExpected:\n{expected}\nActual:\n{actual}\n---");
}

Console.WriteLine($"OK {name}");
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
// Copyright (c) The NATS Authors.
// Licensed under the Apache License, Version 2.0.

using NATS.Jwt;
using NATS.Jwt.TestNativeAot;
using NATS.NKeys;

var jwt = new NatsJwt();
Expand All @@ -13,7 +17,7 @@
var ospk = oskp.GetPublicKey();
oc.Operator.SigningKeys = [ospk];

var operatorJwt = jwt.Encode(oc, okp, DateTimeOffset.FromUnixTimeSeconds(1720720359));
var operatorJwt = jwt.EncodeOperatorClaims(oc, okp, DateTimeOffset.FromUnixTimeSeconds(1720720359));
const string operatorJwt1 = "eyJ0eXAiOiJKV1QiLCJhbGciOiJlZDI1NTE5LW5rZXkifQ.eyJqdGkiOiI3Q0haWEJDQ0FCTFZENk80VFJGRkcyWjJFUUtHT1A1MzZESFRaUkU0VVZTQ0lDTjZHS0VBIiwiaWF0IjoxNzIwNzIwMzU5LCJpc3MiOiJPQVVHVEg0VEQyNTNZS0RGTVBCVlFBNkxTNkQ0WlJST1RLRksyQkVHRkdPN0EyNVlPUVNUVFpHTiIsIm5hbWUiOiJPIiwic3ViIjoiT0FVR1RINFREMjUzWUtERk1QQlZRQTZMUzZENFpSUk9US0ZLMkJFR0ZHTzdBMjVZT1FTVFRaR04iLCJuYXRzIjp7InNpZ25pbmdfa2V5cyI6WyJPQ0dBQVFIWEJXN1RaN1BMUVZUNUhUU1JMVFVSNldXS1lXTkdESFpKSUZKVlVGM0dWQktZNjI2WiJdLCJ0eXBlIjoib3BlcmF0b3IiLCJ2ZXJzaW9uIjoyfX0.Kv8xA8FmO0XKC79pgEty-bmYCTKpKU6gJPby3OfMMbsUHY4qobdvrpsbrmroCNNZHjSCmwY0Y8Fs-AxO-gSUBQ";
Assert.Equal(operatorJwt1, operatorJwt, "operatorJwt");

Expand All @@ -25,7 +29,7 @@
var askp = KeyPair.FromSeed("SAAOEJM7WOGBA6E67NAHP7TNGR2ABLKIGKA4EY264LIINLRJNRZJE2HOSU");
var aspk = askp.GetPublicKey();
ac.Account.SigningKeys = [aspk];
var accountJwt = jwt.Encode(ac, oskp, DateTimeOffset.FromUnixTimeSeconds(1720720359));
var accountJwt = jwt.EncodeAccountClaims(ac, oskp, DateTimeOffset.FromUnixTimeSeconds(1720720359));

const string accountJwt1 = "eyJ0eXAiOiJKV1QiLCJhbGciOiJlZDI1NTE5LW5rZXkifQ.eyJqdGkiOiI3STIzVDJGUEpLUU9LRkdTNVVJUjdOUVc0MlVNVEVYRkhISDdOSURYQkFZRVNDNFZFU1JRIiwiaWF0IjoxNzIwNzIwMzU5LCJpc3MiOiJPQ0dBQVFIWEJXN1RaN1BMUVZUNUhUU1JMVFVSNldXS1lXTkdESFpKSUZKVlVGM0dWQktZNjI2WiIsIm5hbWUiOiJBIiwic3ViIjoiQUFGSDNPVTRUUDIzQlZLTEFXUkpFQTNTM1RZSU9BQlI1NUJHQkRZT0g3NFVVTDZKNlBTSkhHSUIiLCJuYXRzIjp7ImxpbWl0cyI6eyJzdWJzIjotMSwiZGF0YSI6LTEsInBheWxvYWQiOi0xLCJpbXBvcnRzIjotMSwiZXhwb3J0cyI6LTEsIndpbGRjYXJkcyI6dHJ1ZSwiY29ubiI6LTEsImxlYWYiOi0xfSwic2lnbmluZ19rZXlzIjpbIkFBMjdGMjRJQVVES1M1T0RRUUU2S0xVQk5TVllIVU5OS0dJWTRWMkpXTDJEU1dKNFFQWlo3TE43Il0sImRlZmF1bHRfcGVybWlzc2lvbnMiOnsicHViIjp7fSwic3ViIjp7fX0sImF1dGhvcml6YXRpb24iOnt9LCJ0eXBlIjoiYWNjb3VudCIsInZlcnNpb24iOjJ9fQ.0dEQvGqCwZhjhCEfnSkhMbGfMtx-G9PxXIyaRjMvqPaTZahHRypH38tbLegJcmVPJ0GvmtqRFD95M5F_bXFsDQ";
Assert.Equal(accountJwt1, accountJwt, "accountJwt");
Expand All @@ -37,7 +41,7 @@
var upk = ukp.GetPublicKey();
var uc = jwt.NewUserClaims(upk);
uc.User.IssuerAccount = apk;
var userJwt = jwt.Encode(uc, askp, DateTimeOffset.FromUnixTimeSeconds(1720720359));
var userJwt = jwt.EncodeUserClaims(uc, askp, DateTimeOffset.FromUnixTimeSeconds(1720720359));

const string userJwt1 = "eyJ0eXAiOiJKV1QiLCJhbGciOiJlZDI1NTE5LW5rZXkifQ.eyJqdGkiOiJRWFBKRFBaNUFVWlBQWk5MWDJBVUI3M1lLU1VZQ0RRNEhVTkpNQ0dTREhaVDNNU1hERlNRIiwiaWF0IjoxNzIwNzIwMzU5LCJpc3MiOiJBQTI3RjI0SUFVREtTNU9EUVFFNktMVUJOU1ZZSFVOTktHSVk0VjJKV0wyRFNXSjRRUFpaN0xONyIsInN1YiI6IlVDTUpLUFJZR1kzUUNaQVhBVUJWWFhJSVIySElPVFJHS1FDTUFERkZHVjNORFZWUkxHNUpLSUxKIiwibmF0cyI6eyJwdWIiOnt9LCJzdWIiOnt9LCJzdWJzIjotMSwiZGF0YSI6LTEsInBheWxvYWQiOi0xLCJpc3N1ZXJfYWNjb3VudCI6IkFBRkgzT1U0VFAyM0JWS0xBV1JKRUEzUzNUWUlPQUJSNTVCR0JEWU9INzRVVUw2SjZQU0pIR0lCIiwidHlwZSI6InVzZXIiLCJ2ZXJzaW9uIjoyfX0.EOj8fO8TshAjXYUxvyg1msy4sg7T250_FK_Jd4qmsOXCu2LrI3-dKeXfj2W3LWegiSvJL09uC2FQ8LEWSHD5BA";
Assert.Equal(userJwt1, userJwt, "userJwt");
Expand All @@ -46,14 +50,3 @@
Assert.Equal(userSeed1, ukp.GetSeed(), "userSeed");

Console.WriteLine("PASS");

public static class Assert
{
public static void Equal(string expected, string actual, string name)
{
if (!string.Equals(expected, actual))
throw new Exception($"Strings are not equal ({name}).\n---\nExpected:\n{expected}\nActual:\n{actual}\n---");

Console.WriteLine($"OK {name}");
}
}
24 changes: 9 additions & 15 deletions NATS.Jwt.Tests/ConnectTests.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
using System;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using NATS.Client.Core;
using NATS.Jwt.Internal;
using NATS.Jwt.Models;
using NATS.NKeys;
using Xunit;
using Xunit.Abstractions;
Expand Down Expand Up @@ -79,7 +73,7 @@ public async Task Generate_JWTs()
var ospk = oskp.GetPublicKey();
oc.Operator.SigningKeys = [ospk];

var operatorJwt = jwt.Encode(oc, okp, DateTimeOffset.FromUnixTimeSeconds(1720720359));
var operatorJwt = jwt.EncodeOperatorClaims(oc, okp, DateTimeOffset.FromUnixTimeSeconds(1720720359));
const string operatorJwt1 = "eyJ0eXAiOiJKV1QiLCJhbGciOiJlZDI1NTE5LW5rZXkifQ.eyJqdGkiOiI3Q0haWEJDQ0FCTFZENk80VFJGRkcyWjJFUUtHT1A1MzZESFRaUkU0VVZTQ0lDTjZHS0VBIiwiaWF0IjoxNzIwNzIwMzU5LCJpc3MiOiJPQVVHVEg0VEQyNTNZS0RGTVBCVlFBNkxTNkQ0WlJST1RLRksyQkVHRkdPN0EyNVlPUVNUVFpHTiIsIm5hbWUiOiJPIiwic3ViIjoiT0FVR1RINFREMjUzWUtERk1QQlZRQTZMUzZENFpSUk9US0ZLMkJFR0ZHTzdBMjVZT1FTVFRaR04iLCJuYXRzIjp7InNpZ25pbmdfa2V5cyI6WyJPQ0dBQVFIWEJXN1RaN1BMUVZUNUhUU1JMVFVSNldXS1lXTkdESFpKSUZKVlVGM0dWQktZNjI2WiJdLCJ0eXBlIjoib3BlcmF0b3IiLCJ2ZXJzaW9uIjoyfX0.Kv8xA8FmO0XKC79pgEty-bmYCTKpKU6gJPby3OfMMbsUHY4qobdvrpsbrmroCNNZHjSCmwY0Y8Fs-AxO-gSUBQ";
Assert.Equal(operatorJwt1, operatorJwt);

Expand All @@ -91,7 +85,7 @@ public async Task Generate_JWTs()
var askp = KeyPair.FromSeed("SAAOEJM7WOGBA6E67NAHP7TNGR2ABLKIGKA4EY264LIINLRJNRZJE2HOSU".ToCharArray());
var aspk = askp.GetPublicKey();
ac.Account.SigningKeys = [aspk];
var accountJwt = jwt.Encode(ac, oskp, DateTimeOffset.FromUnixTimeSeconds(1720720359));
var accountJwt = jwt.EncodeAccountClaims(ac, oskp, DateTimeOffset.FromUnixTimeSeconds(1720720359));

const string accountJwt1 = "eyJ0eXAiOiJKV1QiLCJhbGciOiJlZDI1NTE5LW5rZXkifQ.eyJqdGkiOiI3STIzVDJGUEpLUU9LRkdTNVVJUjdOUVc0MlVNVEVYRkhISDdOSURYQkFZRVNDNFZFU1JRIiwiaWF0IjoxNzIwNzIwMzU5LCJpc3MiOiJPQ0dBQVFIWEJXN1RaN1BMUVZUNUhUU1JMVFVSNldXS1lXTkdESFpKSUZKVlVGM0dWQktZNjI2WiIsIm5hbWUiOiJBIiwic3ViIjoiQUFGSDNPVTRUUDIzQlZLTEFXUkpFQTNTM1RZSU9BQlI1NUJHQkRZT0g3NFVVTDZKNlBTSkhHSUIiLCJuYXRzIjp7ImxpbWl0cyI6eyJzdWJzIjotMSwiZGF0YSI6LTEsInBheWxvYWQiOi0xLCJpbXBvcnRzIjotMSwiZXhwb3J0cyI6LTEsIndpbGRjYXJkcyI6dHJ1ZSwiY29ubiI6LTEsImxlYWYiOi0xfSwic2lnbmluZ19rZXlzIjpbIkFBMjdGMjRJQVVES1M1T0RRUUU2S0xVQk5TVllIVU5OS0dJWTRWMkpXTDJEU1dKNFFQWlo3TE43Il0sImRlZmF1bHRfcGVybWlzc2lvbnMiOnsicHViIjp7fSwic3ViIjp7fX0sImF1dGhvcml6YXRpb24iOnt9LCJ0eXBlIjoiYWNjb3VudCIsInZlcnNpb24iOjJ9fQ.0dEQvGqCwZhjhCEfnSkhMbGfMtx-G9PxXIyaRjMvqPaTZahHRypH38tbLegJcmVPJ0GvmtqRFD95M5F_bXFsDQ";
Assert.Equal(accountJwt1, accountJwt);
Expand All @@ -103,7 +97,7 @@ public async Task Generate_JWTs()
var upk = ukp.GetPublicKey();
var uc = jwt.NewUserClaims(upk);
uc.User.IssuerAccount = apk;
var userJwt = jwt.Encode(uc, askp, DateTimeOffset.FromUnixTimeSeconds(1720720359));
var userJwt = jwt.EncodeUserClaims(uc, askp, DateTimeOffset.FromUnixTimeSeconds(1720720359));

const string userJwt1 = "eyJ0eXAiOiJKV1QiLCJhbGciOiJlZDI1NTE5LW5rZXkifQ.eyJqdGkiOiJRWFBKRFBaNUFVWlBQWk5MWDJBVUI3M1lLU1VZQ0RRNEhVTkpNQ0dTREhaVDNNU1hERlNRIiwiaWF0IjoxNzIwNzIwMzU5LCJpc3MiOiJBQTI3RjI0SUFVREtTNU9EUVFFNktMVUJOU1ZZSFVOTktHSVk0VjJKV0wyRFNXSjRRUFpaN0xONyIsInN1YiI6IlVDTUpLUFJZR1kzUUNaQVhBVUJWWFhJSVIySElPVFJHS1FDTUFERkZHVjNORFZWUkxHNUpLSUxKIiwibmF0cyI6eyJwdWIiOnt9LCJzdWIiOnt9LCJzdWJzIjotMSwiZGF0YSI6LTEsInBheWxvYWQiOi0xLCJpc3N1ZXJfYWNjb3VudCI6IkFBRkgzT1U0VFAyM0JWS0xBV1JKRUEzUzNUWUlPQUJSNTVCR0JEWU9INzRVVUw2SjZQU0pIR0lCIiwidHlwZSI6InVzZXIiLCJ2ZXJzaW9uIjoyfX0.EOj8fO8TshAjXYUxvyg1msy4sg7T250_FK_Jd4qmsOXCu2LrI3-dKeXfj2W3LWegiSvJL09uC2FQ8LEWSHD5BA";
// Assert.Equal(userJwt1, userJwt);
Expand All @@ -126,7 +120,7 @@ public async Task Connect_with_generated_JWTs()
var oskp = KeyPair.CreatePair(PrefixByte.Operator);
var ospk = oskp.GetPublicKey();
oc.Operator.SigningKeys = [ospk];
var operatorJwt = jwt.Encode(oc, okp);
var operatorJwt = jwt.EncodeOperatorClaims(oc, okp);

var akp = KeyPair.CreatePair(PrefixByte.Account);
var apk = akp.GetPublicKey();
Expand All @@ -136,13 +130,13 @@ public async Task Connect_with_generated_JWTs()
var askp = KeyPair.CreatePair(PrefixByte.Account);
var aspk = askp.GetPublicKey();
ac.Account.SigningKeys = [aspk];
var accountJwt = jwt.Encode(ac, oskp);
var accountJwt = jwt.EncodeAccountClaims(ac, oskp);

var ukp = KeyPair.CreatePair(PrefixByte.User);
var upk = ukp.GetPublicKey();
var uc = jwt.NewUserClaims(upk);
uc.User.IssuerAccount = apk;
var userJwt = jwt.Encode(uc, askp);
var userJwt = jwt.EncodeUserClaims(uc, askp);

var userSeed = ukp.GetSeed();

Expand Down Expand Up @@ -195,7 +189,7 @@ public async Task Readme_example()
var oskp = KeyPair.CreatePair(PrefixByte.Operator);
var ospk = oskp.GetPublicKey();
oc.Operator.SigningKeys = [ospk];
var operatorJwt = jwt.Encode(oc, okp);
var operatorJwt = jwt.EncodeOperatorClaims(oc, okp);

var akp = KeyPair.CreatePair(PrefixByte.Account);
var apk = akp.GetPublicKey();
Expand All @@ -205,13 +199,13 @@ public async Task Readme_example()
var askp = KeyPair.CreatePair(PrefixByte.Account);
var aspk = askp.GetPublicKey();
ac.Account.SigningKeys = [aspk];
var accountJwt = jwt.Encode(ac, oskp);
var accountJwt = jwt.EncodeAccountClaims(ac, oskp);

var ukp = KeyPair.CreatePair(PrefixByte.User);
var upk = ukp.GetPublicKey();
var uc = jwt.NewUserClaims(upk);
uc.User.IssuerAccount = apk;
var userJwt = jwt.Encode(uc, askp);
var userJwt = jwt.EncodeUserClaims(uc, askp);

var userSeed = ukp.GetSeed();

Expand Down
97 changes: 97 additions & 0 deletions NATS.Jwt.Tests/Models/JetStreamLimitsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
// Copyright (c) The NATS Authors.
// Licensed under the Apache License, Version 2.0.

using System.Text.Json;
using NATS.Jwt.Models;
using Xunit;

namespace NATS.Jwt.Tests.Models;

public class JetStreamLimitsTests
{
[Fact]
public void SerializeJetStreamLimits_AllPropertiesSet()
{
var limits = new JetStreamLimits
{
MemoryStorage = 1024,
DiskStorage = 2048,
Streams = 10,
Consumer = 5,
MaxAckPending = 100,
MemoryMaxStreamBytes = 512,
DiskMaxStreamBytes = 1024,
MaxBytesRequired = true,
};

var json = JsonSerializer.Serialize(limits);
var expected = "{\"mem_storage\":1024,\"disk_storage\":2048,\"streams\":10,\"consumer\":5,\"max_ack_pending\":100,\"mem_max_stream_bytes\":512,\"disk_max_stream_bytes\":1024,\"max_bytes_required\":true}";

Assert.Equal(expected, json);
}

[Fact]
public void SerializeJetStreamLimits_DefaultValues()
{
var limits = new JetStreamLimits();

var json = JsonSerializer.Serialize(limits);
var expected = "{}";

Assert.Equal(expected, json);
}

[Fact]
public void DeserializeJetStreamLimits_AllPropertiesSet()
{
var json = "{\"mem_storage\":1024,\"disk_storage\":2048,\"streams\":10,\"consumer\":5,\"max_ack_pending\":100,\"mem_max_stream_bytes\":512,\"disk_max_stream_bytes\":1024,\"max_bytes_required\":true}";

var limits = JsonSerializer.Deserialize<JetStreamLimits>(json);

Assert.NotNull(limits);
Assert.Equal(1024, limits.MemoryStorage);
Assert.Equal(2048, limits.DiskStorage);
Assert.Equal(10, limits.Streams);
Assert.Equal(5, limits.Consumer);
Assert.Equal(100, limits.MaxAckPending);
Assert.Equal(512, limits.MemoryMaxStreamBytes);
Assert.Equal(1024, limits.DiskMaxStreamBytes);
Assert.True(limits.MaxBytesRequired);
}

[Fact]
public void DeserializeJetStreamLimits_PartialProperties()
{
var json = "{\"mem_storage\":1024,\"streams\":10,\"max_bytes_required\":true}";

var limits = JsonSerializer.Deserialize<JetStreamLimits>(json);

Assert.NotNull(limits);
Assert.Equal(1024, limits.MemoryStorage);
Assert.Equal(0, limits.DiskStorage);
Assert.Equal(10, limits.Streams);
Assert.Equal(0, limits.Consumer);
Assert.Equal(0, limits.MaxAckPending);
Assert.Equal(0, limits.MemoryMaxStreamBytes);
Assert.Equal(0, limits.DiskMaxStreamBytes);
Assert.True(limits.MaxBytesRequired);
}

[Fact]
public void DeserializeJetStreamLimits_EmptyJson()
{
var json = "{}";

var limits = JsonSerializer.Deserialize<JetStreamLimits>(json);

Assert.NotNull(limits);
Assert.Equal(0, limits.MemoryStorage);
Assert.Equal(0, limits.DiskStorage);
Assert.Equal(0, limits.Streams);
Assert.Equal(0, limits.Consumer);
Assert.Equal(0, limits.MaxAckPending);
Assert.Equal(0, limits.MemoryMaxStreamBytes);
Assert.Equal(0, limits.DiskMaxStreamBytes);
Assert.False(limits.MaxBytesRequired);
}
}
Loading

0 comments on commit 4910dd4

Please sign in to comment.