##// END OF EJS Templates
debug: add a method to check the state of, and built an SSL cert chain...
debug: add a method to check the state of, and built an SSL cert chain This is only useful on Windows, and avoids the need to use Internet Explorer to build the certificate chain. I can see this being extended in the future to print information about the certificate(s) to help debug issues on any platform. Maybe even perform some of the python checks listed on the secure connections wiki page. But for now, all I need is 1) a command that can be invoked in a setup script to ensure the certificate is installed, and 2) a command that the user can run if/when a certificate changes in the future. It would have been nice to leverage the sslutil library to pick up host specific settings, but attempting to use sslutil.wrapsocket() failed the 'not sslsocket.cipher()' check in it and aborted. The output is a little more chatty than some commands, but I've seen the update take 10+ seconds, and this is only a debug command.

File last commit:

r31284:74cbbd54 default
r33493:9a9f9521 default
Show More
test-filecache.py
253 lines | 6.3 KiB | text/x-python | PythonLexer
/ tests / test-filecache.py
Robert Stanca
py3: use print_function in test-filecache.py
r28742 from __future__ import absolute_import, print_function
Robert Stanca
py3: use absolute_import in test-filecache.py
r28741 import os
import subprocess
import sys
Idan Kamara
scmutil: introduce filecache...
r14928
Brodie Rao
cleanup: eradicate long lines
r16683 if subprocess.call(['python', '%s/hghave' % os.environ['TESTDIR'],
'cacheable']):
Idan Kamara
scmutil: introduce filecache...
r14928 sys.exit(80)
Yuya Nishihara
test-filecache: sort import lines
r28802 from mercurial import (
extensions,
hg,
Pierre-Yves David
filecache: explicitly test 'repofilecache'...
r31284 localrepo,
Yuya Nishihara
test-filecache: alias ui as uimod
r28803 ui as uimod,
Yuya Nishihara
test-filecache: sort import lines
r28802 util,
Pierre-Yves David
vfs: use 'vfs' module directly in 'test-filecache'...
r31251 vfs as vfsmod,
Yuya Nishihara
test-filecache: sort import lines
r28802 )
Idan Kamara
scmutil: introduce filecache...
r14928
class fakerepo(object):
def __init__(self):
self._filecache = {}
Pierre-Yves David
filecache: explicitly test 'repofilecache'...
r31284 class fakevfs(object):
def join(self, p):
return p
vfs = fakevfs()
def unfiltered(self):
return self
Idan Kamara
scmutil: introduce filecache...
r14928
def sjoin(self, p):
return p
Pierre-Yves David
filecache: explicitly test 'repofilecache'...
r31284 @localrepo.repofilecache('x', 'y')
Idan Kamara
scmutil: introduce filecache...
r14928 def cached(self):
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print('creating')
Siddharth Agarwal
test-filecache.py: make setbeforeget test clearer...
r20040 return 'string from function'
Idan Kamara
scmutil: introduce filecache...
r14928
def invalidate(self):
for k in self._filecache:
try:
delattr(self, k)
except AttributeError:
pass
def basic(repo):
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print("* neither file exists")
Siddharth Agarwal
test-filecache.py: add markers to the output for each event...
r20041 # calls function
Idan Kamara
scmutil: introduce filecache...
r14928 repo.cached
repo.invalidate()
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print("* neither file still exists")
Siddharth Agarwal
test-filecache.py: add markers to the output for each event...
r20041 # uses cache
Idan Kamara
scmutil: introduce filecache...
r14928 repo.cached
# create empty file
f = open('x', 'w')
f.close()
repo.invalidate()
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print("* empty file x created")
Idan Kamara
scmutil: introduce filecache...
r14928 # should recreate the object
repo.cached
f = open('x', 'w')
f.write('a')
f.close()
repo.invalidate()
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print("* file x changed size")
Idan Kamara
scmutil: introduce filecache...
r14928 # should recreate the object
repo.cached
repo.invalidate()
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print("* nothing changed with either file")
Siddharth Agarwal
test-filecache.py: add markers to the output for each event...
r20041 # stats file again, reuses object
Idan Kamara
scmutil: introduce filecache...
r14928 repo.cached
# atomic replace file, size doesn't change
# hopefully st_mtime doesn't change as well so this doesn't use the cache
# because of inode change
Pierre-Yves David
vfs: use 'vfs' module directly in 'test-filecache'...
r31251 f = vfsmod.vfs('.')('x', 'w', atomictemp=True)
Idan Kamara
scmutil: introduce filecache...
r14928 f.write('b')
Greg Ward
atomictempfile: make close() consistent with other file-like objects....
r15057 f.close()
Idan Kamara
scmutil: introduce filecache...
r14928
repo.invalidate()
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print("* file x changed inode")
Idan Kamara
scmutil: introduce filecache...
r14928 repo.cached
Siddharth Agarwal
scmutil.filecache: support watching over multiple files
r20045 # create empty file y
f = open('y', 'w')
f.close()
repo.invalidate()
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print("* empty file y created")
Siddharth Agarwal
scmutil.filecache: support watching over multiple files
r20045 # should recreate the object
repo.cached
f = open('y', 'w')
f.write('A')
f.close()
repo.invalidate()
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print("* file y changed size")
Siddharth Agarwal
scmutil.filecache: support watching over multiple files
r20045 # should recreate the object
repo.cached
Pierre-Yves David
vfs: use 'vfs' module directly in 'test-filecache'...
r31251 f = vfsmod.vfs('.')('y', 'w', atomictemp=True)
Siddharth Agarwal
scmutil.filecache: support watching over multiple files
r20045 f.write('B')
f.close()
repo.invalidate()
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print("* file y changed inode")
Siddharth Agarwal
scmutil.filecache: support watching over multiple files
r20045 repo.cached
Pierre-Yves David
vfs: use 'vfs' module directly in 'test-filecache'...
r31251 f = vfsmod.vfs('.')('x', 'w', atomictemp=True)
Siddharth Agarwal
scmutil.filecache: support watching over multiple files
r20045 f.write('c')
f.close()
Pierre-Yves David
vfs: use 'vfs' module directly in 'test-filecache'...
r31251 f = vfsmod.vfs('.')('y', 'w', atomictemp=True)
Siddharth Agarwal
scmutil.filecache: support watching over multiple files
r20045 f.write('C')
f.close()
repo.invalidate()
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print("* both files changed inode")
Siddharth Agarwal
scmutil.filecache: support watching over multiple files
r20045 repo.cached
Idan Kamara
scmutil: introduce filecache...
r14928 def fakeuncacheable():
def wrapcacheable(orig, *args, **kwargs):
return False
def wrapinit(orig, *args, **kwargs):
pass
originit = extensions.wrapfunction(util.cachestat, '__init__', wrapinit)
Matt Mackall
filecache: fix check-code complaint
r14937 origcacheable = extensions.wrapfunction(util.cachestat, 'cacheable',
wrapcacheable)
Idan Kamara
scmutil: introduce filecache...
r14928
Siddharth Agarwal
scmutil.filecache: support watching over multiple files
r20045 for fn in ['x', 'y']:
try:
os.remove(fn)
except OSError:
pass
Idan Kamara
scmutil: introduce filecache...
r14928
basic(fakerepo())
util.cachestat.cacheable = origcacheable
util.cachestat.__init__ = originit
Idan Kamara
destroyed: keep the filecache in sync with __dict__ (issue3335) (issue3693) (issue3743)...
r18313 def test_filecache_synced():
timeless@mozdev.org
spelling: behaviour -> behavior
r26098 # test old behavior that caused filecached properties to go out of sync
Idan Kamara
destroyed: keep the filecache in sync with __dict__ (issue3335) (issue3693) (issue3743)...
r18313 os.system('hg init && echo a >> a && hg ci -qAm.')
Yuya Nishihara
ui: factor out ui.load() to create a ui without loading configs (API)...
r30559 repo = hg.repository(uimod.ui.load())
Idan Kamara
destroyed: keep the filecache in sync with __dict__ (issue3335) (issue3693) (issue3743)...
r18313 # first rollback clears the filecache, but changelog to stays in __dict__
repo.rollback()
repo.commit('.')
# second rollback comes along and touches the changelog externally
# (file is moved)
repo.rollback()
# but since changelog isn't under the filecache control anymore, we don't
# see that it changed, and return the old changelog without reconstructing
# it
repo.commit('.')
Idan Kamara
filecache: create an entry in _filecache when __set__ is called for a missing one...
r18316 def setbeforeget(repo):
os.remove('x')
Siddharth Agarwal
scmutil.filecache: support watching over multiple files
r20045 os.remove('y')
Siddharth Agarwal
test-filecache.py: make setbeforeget test clearer...
r20040 repo.cached = 'string set externally'
Idan Kamara
filecache: create an entry in _filecache when __set__ is called for a missing one...
r18316 repo.invalidate()
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print("* neither file exists")
print(repo.cached)
Idan Kamara
filecache: create an entry in _filecache when __set__ is called for a missing one...
r18316 repo.invalidate()
f = open('x', 'w')
f.write('a')
f.close()
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print("* file x created")
print(repo.cached)
Idan Kamara
filecache: create an entry in _filecache when __set__ is called for a missing one...
r18316
Siddharth Agarwal
scmutil.filecache: support watching over multiple files
r20045 repo.cached = 'string 2 set externally'
repo.invalidate()
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print("* string set externally again")
print(repo.cached)
Siddharth Agarwal
scmutil.filecache: support watching over multiple files
r20045
repo.invalidate()
f = open('y', 'w')
f.write('b')
f.close()
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print("* file y created")
print(repo.cached)
Siddharth Agarwal
scmutil.filecache: support watching over multiple files
r20045
FUJIWARA Katsunori
scmutil: add file object wrapper class to check ambiguity at closing...
r29995 def antiambiguity():
filename = 'ambigcheck'
# try some times, because reproduction of ambiguity depends on
# "filesystem time"
for i in xrange(5):
fp = open(filename, 'w')
fp.write('FOO')
fp.close()
oldstat = os.stat(filename)
if oldstat.st_ctime != oldstat.st_mtime:
# subsequent changing never causes ambiguity
continue
repetition = 3
# repeat changing via checkambigatclosing, to examine whether
Mads Kiilerich
spelling: fixes of non-dictionary words
r30332 # st_mtime is advanced multiple times as expected
FUJIWARA Katsunori
scmutil: add file object wrapper class to check ambiguity at closing...
r29995 for i in xrange(repetition):
# explicit closing
Pierre-Yves David
vfs: use 'vfs' module directly in 'test-filecache'...
r31251 fp = vfsmod.checkambigatclosing(open(filename, 'a'))
FUJIWARA Katsunori
scmutil: add file object wrapper class to check ambiguity at closing...
r29995 fp.write('FOO')
fp.close()
# implicit closing by "with" statement
Pierre-Yves David
vfs: use 'vfs' module directly in 'test-filecache'...
r31251 with vfsmod.checkambigatclosing(open(filename, 'a')) as fp:
FUJIWARA Katsunori
scmutil: add file object wrapper class to check ambiguity at closing...
r29995 fp.write('BAR')
newstat = os.stat(filename)
if oldstat.st_ctime != newstat.st_ctime:
# timestamp ambiguity was naturally avoided while repetition
continue
# st_mtime should be advanced "repetition * 2" times, because
Mads Kiilerich
spelling: fixes of non-dictionary words
r30332 # all changes occurred at same time (in sec)
FUJIWARA Katsunori
scmutil: add file object wrapper class to check ambiguity at closing...
r29995 expected = (oldstat.st_mtime + repetition * 2) & 0x7fffffff
if newstat.st_mtime != expected:
print("'newstat.st_mtime %s is not %s (as %s + %s * 2)" %
(newstat.st_mtime, expected, oldstat.st_mtime, repetition))
# no more examination is needed regardless of result
break
else:
# This platform seems too slow to examine anti-ambiguity
# of file timestamp (or test happened to be executed at
# bad timing). Exit silently in this case, because running
# on other faster platforms can detect problems
pass
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print('basic:')
print()
Idan Kamara
scmutil: introduce filecache...
r14928 basic(fakerepo())
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print()
print('fakeuncacheable:')
print()
Idan Kamara
scmutil: introduce filecache...
r14928 fakeuncacheable()
Idan Kamara
destroyed: keep the filecache in sync with __dict__ (issue3335) (issue3693) (issue3743)...
r18313 test_filecache_synced()
Robert Stanca
py3: use print_function in test-filecache.py
r28742 print()
print('setbeforeget:')
print()
Idan Kamara
filecache: create an entry in _filecache when __set__ is called for a missing one...
r18316 setbeforeget(fakerepo())
FUJIWARA Katsunori
scmutil: add file object wrapper class to check ambiguity at closing...
r29995 print()
print('antiambiguity:')
print()
antiambiguity()