Package org.nfctools.ndef.decoder

Source Code of org.nfctools.ndef.decoder.HandoverDecoderTest

/**
* Copyright 2011-2012 Adrian Stabiszewski, as@nfctools.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*       http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.nfctools.ndef.decoder;

import static org.junit.Assert.*;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.junit.Test;
import org.nfctools.ndef.NdefContext;
import org.nfctools.ndef.NdefMessageDecoder;
import org.nfctools.ndef.Record;
import org.nfctools.ndef.mime.BinaryMimeRecord;
import org.nfctools.ndef.mime.MimeRecord;
import org.nfctools.ndef.wkt.handover.records.AlternativeCarrierRecord;
import org.nfctools.ndef.wkt.handover.records.AlternativeCarrierRecord.CarrierPowerState;
import org.nfctools.ndef.wkt.handover.records.CollisionResolutionRecord;
import org.nfctools.ndef.wkt.handover.records.HandoverRequestRecord;
import org.nfctools.ndef.wkt.handover.records.HandoverSelectRecord;
import org.nfctools.utils.NfcUtils;

public class HandoverDecoderTest {

  private String BLUETOOTH_HANDOVER_REQUEST_MESSAGE = "91020A487210D102046163010130005A103101"
      + "6F6E2F766E642E626F6775732E6F6F62"
      + "30003101078080bfA1040D080620110E01020304050607080910111213141516110F01020304050607080910111213141516";

  private NdefMessageDecoder decoder = NdefContext.getNdefMessageDecoder();

  @Test
  public void testBluetoothHandoverRequest10() throws Exception {
    List<Record> records = decoder.decodeToRecords(NfcUtils.convertASCIIToBin(BLUETOOTH_HANDOVER_REQUEST_MESSAGE));

    HandoverRequestRecord handoverRequestRecord = (HandoverRequestRecord)records.get(0);

    assertEquals(1, handoverRequestRecord.getMajorVersion());
    assertEquals(0, handoverRequestRecord.getMinorVersion());
    assertNull(handoverRequestRecord.getCollisionResolution());

    assertEquals(1, handoverRequestRecord.getAlternativeCarriers().size());

    AlternativeCarrierRecord alternativeCarrierRecord = handoverRequestRecord.getAlternativeCarriers().get(0);
    assertEquals(CarrierPowerState.Active, alternativeCarrierRecord.getCarrierPowerState());
    assertEquals("0", alternativeCarrierRecord.getCarrierDataReference());
    assertEquals(0, alternativeCarrierRecord.getAuxiliaryDataReferences().size());

    BinaryMimeRecord binaryMimeRecord = (BinaryMimeRecord)records.get(1);
    assertArrayEquals(new byte[] { 0x30 }, binaryMimeRecord.getId());

  }

  @Test
  public void testBluetoothHandoverRequest12() throws Exception {
    byte[] message = getResource("/handover/1.2/BluetoothHandoverRequestMessage.bin");

    List<Record> records = decoder.decodeToRecords(message);
    assertEquals(2, records.size());

    HandoverRequestRecord handoverRequestRecord = (HandoverRequestRecord)records.get(0);

    assertEquals(1, handoverRequestRecord.getMajorVersion());
    assertEquals(2, handoverRequestRecord.getMinorVersion());

    CollisionResolutionRecord collisionResolution = handoverRequestRecord.getCollisionResolution();
    assertEquals((0x01 << 8) | 0x02, collisionResolution.getRandomNumber());

    List<AlternativeCarrierRecord> alternativeCarriers = handoverRequestRecord.getAlternativeCarriers();
    assertEquals(1, alternativeCarriers.size());

    AlternativeCarrierRecord alternativeCarrierRecord = alternativeCarriers.get(0);
    assertEquals("0", alternativeCarrierRecord.getCarrierDataReference());
    assertFalse(alternativeCarrierRecord.hasAuxiliaryDataReferences());

    MimeRecord bluetooth = (MimeRecord)records.get(1);
    assertEquals("0", bluetooth.getKey());
  }

  @Test
  public void testBluetoothHandoverSelect12() throws Exception {
    //File file = new File("../../nfctools-fork2/nfctools-ndef/src/test/main/resources/handover/1.2/BluetoothHandoverRequestMessage.bin");

    byte[] message = getResource("/handover/1.2/BluetoothHandoverSelectMessage.bin");

    List<Record> records = decoder.decodeToRecords(message);
    assertEquals(2, records.size());

    HandoverSelectRecord handoverSelectRecord = (HandoverSelectRecord)records.get(0);

    assertEquals(1, handoverSelectRecord.getMajorVersion());
    assertEquals(2, handoverSelectRecord.getMinorVersion());

    List<AlternativeCarrierRecord> alternativeCarriers = handoverSelectRecord.getAlternativeCarriers();
    assertEquals(1, alternativeCarriers.size());

    AlternativeCarrierRecord alternativeCarrierRecord = alternativeCarriers.get(0);
    assertEquals(AlternativeCarrierRecord.CarrierPowerState.Active, alternativeCarrierRecord.getCarrierPowerState());
    assertEquals("0", alternativeCarrierRecord.getCarrierDataReference());
    assertFalse(alternativeCarrierRecord.hasAuxiliaryDataReferences());

    assertFalse(handoverSelectRecord.hasError());

    MimeRecord bluetooth = (MimeRecord)records.get(1);
    assertEquals("0", bluetooth.getKey());
  }

  @Test
  public void testBluetoothHandoverSelectTag12() throws Exception {
    byte[] message = getResource("/handover/1.2/BluetoothHandoverSelectMessageTag.bin");

    List<Record> records = decoder.decodeToRecords(message);
    assertEquals(2, records.size());

    HandoverSelectRecord handoverSelectRecord = (HandoverSelectRecord)records.get(0);

    assertEquals(1, handoverSelectRecord.getMajorVersion());
    assertEquals(2, handoverSelectRecord.getMinorVersion());

    List<AlternativeCarrierRecord> alternativeCarriers = handoverSelectRecord.getAlternativeCarriers();
    assertEquals(1, alternativeCarriers.size());

    AlternativeCarrierRecord alternativeCarrierRecord = alternativeCarriers.get(0);
    assertEquals(AlternativeCarrierRecord.CarrierPowerState.Unknown,
        alternativeCarrierRecord.getCarrierPowerState()); // note: active in figure, but unknown in table
    assertEquals("0", alternativeCarrierRecord.getCarrierDataReference());
    assertFalse(alternativeCarrierRecord.hasAuxiliaryDataReferences());

    assertFalse(handoverSelectRecord.hasError());

    MimeRecord bluetooth = (MimeRecord)records.get(1);
    assertEquals("0", bluetooth.getKey());
  }

  public byte[] getResource(String resouce) throws IOException {
    InputStream in = getClass().getResourceAsStream(resouce);

    assertNotNull(in);

    try {
      ByteArrayOutputStream bout = new ByteArrayOutputStream();

      byte[] buffer = new byte[1024];

      int read;
      do {
        read = in.read(buffer);

        if (read == -1) {
          break;
        }
        else {
          bout.write(buffer, 0, read);
        }
      } while (true);

      return bout.toByteArray();
    }
    finally {
      in.close();
    }
  }
}
TOP

Related Classes of org.nfctools.ndef.decoder.HandoverDecoderTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.