[Pcsclite-git-commit] [PCSC] 09/11: Unitary test for SCardCancel

Ludovic Rousseau rousseau at moszumanska.debian.org
Fri Mar 11 17:54:48 UTC 2016


This is an automated email from the git hooks/post-receive script.

rousseau pushed a commit to branch master
in repository PCSC.

commit f649b29424dc55c63c8bbf7c6006e3cb2cb686e2
Author: Ludovic Rousseau <ludovic.rousseau at free.fr>
Date:   Fri Mar 11 11:49:12 2016 +0100

    Unitary test for SCardCancel
    
    Test the bug fix in 57b0ba5a200bcbf1c489d39261340324392a8e8a
---
 UnitaryTests/SCardCancel3.py | 96 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 96 insertions(+)

diff --git a/UnitaryTests/SCardCancel3.py b/UnitaryTests/SCardCancel3.py
new file mode 100755
index 0000000..51af9c9
--- /dev/null
+++ b/UnitaryTests/SCardCancel3.py
@@ -0,0 +1,96 @@
+#! /usr/bin/env python
+
+#   SCardCancel3.py : Unitary test for SCardCancel()
+#   Copyright (C) 2016  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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Check event after SCardCancel is correctly handled
+
+# When a SCardGetStatusChange() was cancelled then a next PC/SC call
+# after the SCardGetStatusChange() may fail with a strange error code if
+# the event waited in SCardGetStatusChange() occurs.
+
+# The bug has been fixed in 57b0ba5a200bcbf1c489d39261340324392a8e8a
+
+from smartcard.scard import *
+from smartcard.pcsc.PCSCExceptions import *
+import threading
+import time
+import sys
+
+
+def getstatuschange():
+    # this call will be cancelled
+    hresult, newstates = SCardGetStatusChange(hcontext, 10000, readerstates.values())
+    print "SCardGetStatusChange()", SCardGetErrorMessage(hresult)
+    if hresult != SCARD_S_SUCCESS and hresult != SCARD_E_TIMEOUT:
+        if SCARD_E_CANCELLED == hresult:
+            print "Cancelled"
+        else:
+            raise BaseSCardException(hresult)
+    print "Finished"
+
+    print "Remove the card and press enter"
+    sys.stdin.read(1)
+
+    # try another PC/SC call. It should return SCARD_W_REMOVED_CARD and
+    # not something else
+    hresult, reader, state, protocol, atr = SCardStatus(hcard)
+    if hresult != SCARD_S_SUCCESS:
+        if hresult != SCARD_W_REMOVED_CARD:
+            raise BaseSCardException(hresult)
+        else:
+            print "Card removed"
+
+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 state in newstates:
+    readername, eventstate, atr = state
+    readerstates[readername] = (readername, eventstate)
+
+# Connect in SCARD_SHARE_SHARED mode
+hresult, hcard, dwActiveProtocol = SCardConnect(hcontext, reader,
+    SCARD_SHARE_SHARED, SCARD_PROTOCOL_ANY)
+if hresult != SCARD_S_SUCCESS:
+    raise BaseSCardException(hresult)
+
+t = threading.Thread(target=getstatuschange)
+t.start()
+
+time.sleep(1)
+print "cancel"
+hresult = SCardCancel(hcontext)
+if hresult != SCARD_S_SUCCESS:
+    print 'Failed to SCardCancel: ' + SCardGetErrorMessage(hresult)
+
+time.sleep(5)
+hresult = SCardReleaseContext(hcontext)
+print "SCardReleaseContext()", SCardGetErrorMessage(hresult)
+if hresult != SCARD_S_SUCCESS:
+    raise ReleaseContextException(hresult)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pcsclite/PCSC.git



More information about the Pcsclite-cvs-commit mailing list