You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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. }