[Pcsclite-cvs-commit] r5873 - /trunk/PCSC/UnitaryTests/SCardGetStatusChange.py

rousseau at users.alioth.debian.org rousseau at users.alioth.debian.org
Mon Jul 18 12:49:31 UTC 2011


Author: rousseau
Date: Mon Jul 18 12:49:30 2011
New Revision: 5873

URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=5873
Log:
Unitary test for SCardGetStatusChange()

Added:
    trunk/PCSC/UnitaryTests/SCardGetStatusChange.py   (with props)

Added: trunk/PCSC/UnitaryTests/SCardGetStatusChange.py
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/UnitaryTests/SCardGetStatusChange.py?rev=5873&op=file
==============================================================================
--- trunk/PCSC/UnitaryTests/SCardGetStatusChange.py (added)
+++ trunk/PCSC/UnitaryTests/SCardGetStatusChange.py Mon Jul 18 12:49:30 2011
@@ -1,0 +1,94 @@
+#! /usr/bin/env python
+
+#   SCardGetStatusChange.py : Unitary test for SCardGetStatusChange()
+#   Copyright (C) 2011  Ludovic Rousseau
+#
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2 of the License, or
+#   (at your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License along
+#   with this program; if not, write to the Free Software Foundation, Inc.,
+#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# Check the return value of SCardGetStatusChange() after a reader has
+# been removed.
+#
+# Windows has a different behavior (Viktor Tarasov) :
+# https://github.com/viktorTarasov/OpenSC/commit/62bda63bd66c4849c0ca4303a9682fb6f6bacd7d
+# /* When token is hot-unplugged:
+#  * - in Linux (pcsc-lite)
+#  * -- SCardGetStatusChange returns OK;
+#  * -- current reader state is 'UNKNOWN';
+#  * -- 'Refresh-attributes' returns 'SC_ERROR_READER_DETACHED'.
+#  *
+#  * - in Windows (WinSCard):
+#  * -- SCardGetStatusChange failes with SCARD_E_NO_READERS_AVAILABLE;
+#  * -- 'Refresh-attributes' returns 'SC_ERROR_NO_READERS_FOUND'.
+#  *
+#  * - FIXME: Mac?
+#  */
+
+from smartcard.scard import *
+from smartcard.pcsc.PCSCExceptions import *
+
+
+def parseEventState(eventstate):
+    stateList = list()
+    states = {SCARD_STATE_IGNORE: "Ignore",
+        SCARD_STATE_CHANGED: "Changed",
+        SCARD_STATE_UNKNOWN: "Unknown",
+        SCARD_STATE_UNAVAILABLE: "Unavailable",
+        SCARD_STATE_EMPTY: "Empty",
+        SCARD_STATE_PRESENT: "Present",
+        SCARD_STATE_ATRMATCH: "ATR match",
+        SCARD_STATE_EXCLUSIVE: "Exclusive",
+        SCARD_STATE_INUSE: "In use",
+        SCARD_STATE_MUTE: "Mute",
+        SCARD_STATE_UNPOWERED: "Unpowered"}
+    for state in states:
+        if eventstate & state:
+            stateList.append(states[state])
+    return stateList
+
+hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)
+if hresult != SCARD_S_SUCCESS:
+    raise EstablishContextException(hresult)
+
+hresult, readers = SCardListReaders(hcontext, [])
+if hresult != SCARD_S_SUCCESS:
+    raise ListReadersException(hresult)
+print 'PC/SC Readers:', readers
+
+readerstates = {}
+for reader in readers:
+    readerstates[reader] = (reader, SCARD_STATE_UNAWARE)
+hresult, newstates = SCardGetStatusChange(hcontext, 0, readerstates.values())
+if hresult != SCARD_S_SUCCESS:
+    raise BaseSCardException(hresult)
+print newstates
+for readerState in newstates:
+    readername, eventstate, atr = readerState
+    readerstates[readername] = (readername, eventstate)
+
+print "Remove the reader"
+
+hresult, newstates = SCardGetStatusChange(hcontext, 10000, readerstates.values())
+print "SCardGetStatusChange()", SCardGetErrorMessage(hresult)
+if hresult != SCARD_S_SUCCESS and hresult != SCARD_E_TIMEOUT:
+    raise BaseSCardException(hresult)
+for readerState in newstates:
+    readername, eventstate, atr = readerState
+    print readername, hex(eventstate)
+    print parseEventState(eventstate)
+
+hresult = SCardReleaseContext(hcontext)
+print "SCardReleaseContext()", SCardGetErrorMessage(hresult)
+if hresult != SCARD_S_SUCCESS:
+    raise ReleaseContextException(hresult)

Propchange: trunk/PCSC/UnitaryTests/SCardGetStatusChange.py
------------------------------------------------------------------------------
    svn:executable = *




More information about the Pcsclite-cvs-commit mailing list