2009/06/28

virtualenv activate

pyOpenSSL に実装されてる機能の数が残念だというお話は
今日も明日もググったー: 16進数 python
でさせて頂いてあったわけですが
以前に証明書の署名アルゴリズムを string で表示させる method と
Connection からサーバの提示する証明書のリストを list で返す method と
見様見真似で実装してみて投稿してみたんですけど
「メソッド足して欲しかったらテスト書けよテスト」
って言われて
「えぇ〜テストなんて書いたことないし、プログラマじゃないしぃ〜」
と自暴自棄になっていた時期もありました

で、テスト書こうということであれば真っ新な環境の方がいいなぁと思い
そういうのって virtualenv とか使うんだって試したことあったんですが
既に忘却の彼方だったので復習する為に検索することに
でまぁ、やることっつったら install して env 作って activate するだけみたい
仕組みだったら
virtualenv - def __mopemope__(self, *args, **kwargs):
で解説されてるし!
あっ、っていうか
モダンPython開発環境入門 - def __mopemope__(self, *args, **kwargs):
こっちの方が興味ありですし!

で、pip? って思ったんですが easy_install (setuptools?) の次らしいです
Why I like pip かを語ってらっしゃる方もいらっしゃることだし
最近人気の、easy_install よりも高機能なインストールコマンド。」と言われたら
とりあえず試してみたくなるのが人情というもの
とりあえずだから bootstrap とか言わずに
cd /tmp
wget http://www.python.org/ftp/python/2.6.2/Python-2.6.2.tar.bz2
tar xfj Python-2.6.2.tar.bz2
cd Python-2.6.2
./configure --prefix=/tmp/local
make -j 4
make install

cd /tmp
wget http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.3.3.tar.gz
tar xfz virtualenv-1.3.3.tar.gz
/tmp/local/bin/python virtualenv-1.3.3 sandbox
source sandbox/bin/activate

wget http://pypi.python.org/packages/source/p/pip/pip-0.4.tar.gz
python pip-0.4/pip.py install ipython
とりあえず ipython 入っちゃった

pyOpenSSL のテストを試してみないとなぁと思ったので
cd /tmp
wget http://jaist.dl.sourceforge.net/sourceforge/pyopenssl/pyOpenSSL-0.9.tar.gz
tar xfz pyOpenSSL-0.9.tar.gz
cd pyOpenSSL-0.9
python setup.py build
python setup.py install
と install してみて
$ cd test
$ python test_ssl.py
............
----------------------------------------------------------------------
Ran 12 tests in 1.009s

OK
$
テスト通ったー!! ってまだ何もしてないですけどね

これで patch あてたもんを install してテスト書いてみました
get_signature_algorithm 向けには用意されてる証明書の署名アルゴリズムで確認
sha1WithRSAEncryption で署名されてました
    def test_get_signature_algorithm(self):
cert = load_certificate(FILETYPE_PEM, self.pemData)
self.assertEqual(cert.get_signature_algorithm(), "sha1WithRSAEncryption")
get_peer_cert_chain 向けには verisign.com に繋いで
  • get_peer_cert_chain の結果の最初が get_peer_certificate の結果と合うか
  • get_peer_cert_chain の結果のそれぞれの CN が想定されるものか
を確認
EV SGC ですねぇ
    def test_get_peer_cert_chain(self):
context = Context(SSLv3_METHOD)
client = socket()
client.connect(('verisign.com', 443))
clientSSL = Connection(context, client)
clientSSL.set_connect_state()
clientSSL.do_handshake()
cert = clientSSL.get_peer_certificate()
certs = clientSSL.get_peer_cert_chain()
self.assertEqual(dump_certificate(FILETYPE_PEM, cert),
dump_certificate(FILETYPE_PEM, certs[0]))
self.assertEqual(certs[0].get_subject().CN, 'www.verisign.com')
self.assertEqual(certs[1].get_subject().CN,
'VeriSign Class 3 Extended Validation SSL SGC CA')
self.assertEqual(certs[2].get_subject().CN,
'VeriSign Class 3 Public Primary Certification Authority - G5')
他の test でも verisign.com に繋いでるんで無駄な気もしつつ
でも test って分けた方がいいの? と思いつつ
こういう場合はどうしたらいいんだろうなぁ

やぁ、virtualenv 素敵だなぁ

0 件のコメント:

コメントを投稿