public void When_Creating_Join_Request_Recreating_Should_Pass_Mic_Check( string appEUIText, string devEUIText, string appKeyText, string devNonceText) { var wrongAppKeyText = "00000000000000000000000000003333"; // create a join request var devNonce = ConversionHelper.StringToByteArray(devNonceText); Array.Reverse(devNonce); var join = new LoRaPayloadJoinRequest(appEUIText, devEUIText, devNonce); Assert.Equal(appEUIText, join.GetAppEUIAsString()); Assert.Equal(devEUIText, join.GetDevEUIAsString()); var uplinkMessage = join.SerializeUplink(appKeyText); Assert.False(join.CheckMic(wrongAppKeyText), "Mic check with wrong appKey should not pass"); Assert.True(join.CheckMic(appKeyText), "Mic check should work after setting it"); var rxpk = uplinkMessage.Rxpk[0]; Assert.True(LoRaPayload.TryCreateLoRaPayload(rxpk, out LoRaPayload parsedLoRaPayload)); Assert.IsType <LoRaPayloadJoinRequest>(parsedLoRaPayload); var parsedLoRaJoinRequest = (LoRaPayloadJoinRequest)parsedLoRaPayload; Assert.True(parsedLoRaPayload.CheckMic(appKeyText), "Parsed join request should pass mic check with correct appKey"); Assert.False(parsedLoRaJoinRequest.CheckMic(wrongAppKeyText), "Parsed join request should not pass mic check with wrong appKey"); }