Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

test_pcsc_cpp_tools.cpp 2.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include <iostream>
  2. #include <string.h>
  3. #include <gtest/gtest.h>
  4. #include <libpcsc_cpptools/ScHex.h>
  5. #include <libpcsc_cpptools/ScReader.h>
  6. #include <libpcsc_cpptools/ScBasicCommand.h>
  7. #define TEST_Hex(FUNCTION) do { \
  8. FUNCTION("", "", 0); \
  9. FUNCTION("42", "\x42", 1); \
  10. FUNCTION("42 00 FF AA 24", "\x42\x00\xff\xaa\x24", 5); \
  11. FUNCTION("00 01 02 03 04 05 06 FF", "\x00\x01\x02\x03\x04\x05\x06\xff", 8); \
  12. } while (0)
  13. #define TEST_byteArrayToString(STR, DATA, SIZE) \
  14. ASSERT_EQ(STR, ScHex::byteArrayToString(std::string((char*)memcpy(new BYTE[SIZE], DATA, SIZE), SIZE)))
  15. TEST(Hex, ByteArrayToString)
  16. {
  17. TEST_Hex(TEST_byteArrayToString);
  18. }
  19. #define TEST_stringToByteArray(STR, DATA, SIZE) do { \
  20. auto bytes = ScHex::stringToByteArray(STR); \
  21. ASSERT_EQ(SIZE, bytes.size()); \
  22. ASSERT_EQ(0, memcmp(bytes.data(), DATA, SIZE)); \
  23. } while (0)
  24. TEST(Hex, StringToByteArray)
  25. {
  26. TEST_Hex(TEST_stringToByteArray);
  27. }
  28. #define TEST_command(STR) do { \
  29. auto res = reader->transmit(ScBasicCommand(STR)); \
  30. ASSERT_NE(nullptr, res->getData().data()); \
  31. auto resp = ScHex::byteArrayToString(res->getData()); \
  32. std::cout << "Response (" << res->getData().size() \
  33. << "): " << resp << std::endl; \
  34. } while (0)
  35. TEST(Reader, Test1)
  36. {
  37. std::cout << "Ensure that at lest 1 reader is connected";
  38. getchar();
  39. ASSERT_TRUE(ScReader::establishContext());
  40. auto readers = ScReader::getReaders();
  41. ASSERT_GE(readers.size(), 1);
  42. for (auto reader : readers)
  43. {
  44. std::cout << reader->getName() << std::endl;
  45. }
  46. auto reader = readers[0];
  47. ASSERT_TRUE(reader->connect());
  48. std::cout << "ATR: " << ScHex::byteArrayToString(reader->getAtr())
  49. << " Result: " << reader->getLastResultString() << std::endl;
  50. TEST_command("94a4 0800 04 2000 2020");
  51. TEST_command("94b2 0104 1d");
  52. TEST_command("94d2 0000 1d 5A 00 E0 00 00 50 5C 7C 58 B2 2A DA 8C 20 01 EA D9 80 1E 04 40 20 0E 3F FF FF FF FF FF");
  53. ASSERT_TRUE(reader->disconnect());
  54. ASSERT_TRUE(ScReader::freeContext());
  55. }
  56. int main(int argc, char* argv[])
  57. {
  58. ::testing::InitGoogleTest(&argc, argv);
  59. return RUN_ALL_TESTS();
  60. /*std::cout << ScReader::establishContext() << std::endl;
  61. auto readers = ScReader::getReaders();
  62. for (auto reader : readers)
  63. {
  64. std::cout << reader->getName() << " ";
  65. std::cout << reader->connect() << " ";
  66. std::cout << reader->disconnect();
  67. std::cout << std::endl;
  68. }
  69. std::cout << ScReader::freeContext() << std::endl;
  70. return 0;*/
  71. }