From 41c6f85a5d0c01cc751386f1e7d83a02d833581b Mon Sep 17 00:00:00 2001 From: aeris Date: Mon, 30 Jan 2017 00:28:28 +0100 Subject: [PATCH] Better faketime --- Makefile | 5 +++-- spec/cryptcheck/{ => tls}/cert_spec.rb | 6 +++--- spec/cryptcheck/tls/server_spec.rb | 2 +- spec/faketime.rb | 18 ++++++++++-------- spec/faketime/faketime.c | 2 +- spec/faketime/faketime.h | 2 +- spec/faketime/libfaketime.so | Bin 8256 -> 8264 bytes 7 files changed, 19 insertions(+), 16 deletions(-) rename spec/cryptcheck/{ => tls}/cert_spec.rb (91%) diff --git a/Makefile b/Makefile index 8d4b939..54e546d 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,8 @@ RUBY_VERSION = $(RUBY_MAJOR_VERSION).3 RUBY_NAME = ruby-$(RUBY_VERSION) RUBY_DIR = build/$(RUBY_NAME) RUBY_OPENSSL_EXT_DIR = $(RUBY_DIR)/ext/openssl -RUBY_LIB_DIR = $(RBENV_ROOT)/versions/$(RUBY_VERSION)-cryptcheck/lib/ruby/$(RUBY_MAJOR_VERSION).0 +RBENV_DIR = $(RBENV_ROOT)/versions/$(RUBY_VERSION)-cryptcheck +RUBY_LIB_DIR = $(RBENV_DIR)/lib/ruby/$(RUBY_MAJOR_VERSION).0 RBENV_ROOT ?= ~/.rbenv export LIBRARY_PATH = $(PWD)/lib export C_INCLUDE_PATH = $(PWD)/$(OPENSSL_DIR)/include @@ -101,7 +102,7 @@ lib/openssl.so: $(RUBY_OPENSSL_EXT_DIR)/openssl.so ext: lib/openssl.so spec/faketime/libfaketime.so: spec/faketime/faketime.c spec/faketime/faketime.h - $(CC) -shared -fPIC $^ -o $@ -ldl -std=c99 -Werror -Wall + $(CC) $^ -o $@ -shared -fPIC -ldl -std=c99 -Werror -Wall lib/libfaketime.so: spec/faketime/libfaketime.so ln -fs ../$< $@ faketime: lib/libfaketime.so diff --git a/spec/cryptcheck/cert_spec.rb b/spec/cryptcheck/tls/cert_spec.rb similarity index 91% rename from spec/cryptcheck/cert_spec.rb rename to spec/cryptcheck/tls/cert_spec.rb index 6d35bbe..ab95e6d 100644 --- a/spec/cryptcheck/cert_spec.rb +++ b/spec/cryptcheck/tls/cert_spec.rb @@ -7,7 +7,7 @@ describe CryptCheck::Tls::Cert do describe '::trusted?' do it 'must accept valid certificate' do - FakeTime.freeze_during Time.utc(2000, 1, 1) do + FakeTime.freeze Time.utc(2000, 1, 1) do cert, *chain, ca = load_chain %w(ecdsa-prime256v1 intermediate ca) trust = ::CryptCheck::Tls::Cert.trusted? cert, chain, roots: ca expect(trust).to eq :trusted @@ -34,7 +34,7 @@ describe CryptCheck::Tls::Cert do end it 'must reject expired certificate' do - FakeTime.freeze_during Time.utc(2002, 1, 1) do + FakeTime.freeze Time.utc(2002, 1, 1) do cert, *chain, ca = load_chain %w(ecdsa-prime256v1 intermediate ca) trust = ::CryptCheck::Tls::Cert.trusted? cert, chain, roots: ca expect(trust).to eq 'certificate has expired' @@ -42,7 +42,7 @@ describe CryptCheck::Tls::Cert do end it 'must reject not yet valid certificate' do - FakeTime.freeze_during Time.utc(1999, 1, 1) do + FakeTime.freeze Time.utc(1999, 1, 1) do cert, *chain, ca = load_chain %w(ecdsa-prime256v1 intermediate ca) trust = ::CryptCheck::Tls::Cert.trusted? cert, chain, roots: ca expect(trust).to eq 'certificate is not yet valid' diff --git a/spec/cryptcheck/tls/server_spec.rb b/spec/cryptcheck/tls/server_spec.rb index 706193c..3562d0d 100644 --- a/spec/cryptcheck/tls/server_spec.rb +++ b/spec/cryptcheck/tls/server_spec.rb @@ -2,7 +2,7 @@ require 'faketime' describe CryptCheck::Tls::Server do before :all do - FakeTime.freeze Time.utc(2000, 1, 1).to_i + FakeTime.freeze Time.utc(2000, 1, 1) end after :all do diff --git a/spec/faketime.rb b/spec/faketime.rb index 6aea428..51e2a11 100644 --- a/spec/faketime.rb +++ b/spec/faketime.rb @@ -4,22 +4,24 @@ module FakeTime extend FFI::Library ffi_lib 'faketime' - def self.freeze(_) + def self._freeze(_) #This is a stub, used for indexing end def self.unfreeze #This is a stub, used for indexing end - attach_function :freeze, [:ulong], :void + attach_function :_freeze, [:ulong], :void attach_function :unfreeze, [], :void - def self.freeze_during(time, &block) - self.freeze time.to_i - begin - return block.call - ensure - self.unfreeze + def self.freeze(time) + self._freeze time.to_i + if block_given? + begin + return yield + ensure + self.unfreeze + end end end end diff --git a/spec/faketime/faketime.c b/spec/faketime/faketime.c index cc07088..86812fa 100644 --- a/spec/faketime/faketime.c +++ b/spec/faketime/faketime.c @@ -9,7 +9,7 @@ time_t frozen_time = 0; typedef time_t (*orig_time_f_type)(time_t*); orig_time_f_type orig_time = NULL; -void freeze(unsigned long time) { +void _freeze(unsigned long time) { frozen_time = (time_t)time; frozen = 1; } diff --git a/spec/faketime/faketime.h b/spec/faketime/faketime.h index 3ec6771..b9af8d8 100644 --- a/spec/faketime/faketime.h +++ b/spec/faketime/faketime.h @@ -1,2 +1,2 @@ -void freeze(unsigned long time); +void _freeze(unsigned long time); void unfreeze(); diff --git a/spec/faketime/libfaketime.so b/spec/faketime/libfaketime.so index f7b672cadc3d498a6a4604ee97d8edfc3d1e9fe4..5c3f3e5f1a5431ef258a145f112fe062d7a8f9c7 100755 GIT binary patch delta 651 zcmX@$aKd4N1|!Et&Gn3yZFQ^6X6MZQnW{G-5NFU3Pyn(J;NoOPW_QM;lM|Ws8D~wN$SltoF?l1i zy5J{mnL5n5C;lf z6cA-*2P$9`6lZjpY$zzo%*hb3*-&sdvnY!HAO(au$b%7 delta 649 zcmZ8eO=wd=5Z-y4G<_(^dyU)8A0$Df^ zT5)=jir9nDsv!D6P!Up8&`?T?g2h|$AnnBzL_Dc8eJg_B^6l=-H?uoC`>x)s-|PkP zWcy?2zoUMv{k;F_!2FS^fxR=0vH36Rh9F2{f(XP8;!Lw5zjxO+vCk$t=vwK*i9PDq z@|mH+3kgp2@#HTTuYQWk-_g}@I{Qx(IR}zCMV!C&L$7K zHEsxjd%>uno$7-&_NR)_3WrnY0b01^XmTw%N+u`(Tn#n!TqSMcho1XVVoYtx9-`}9 zkr8#%jLzslaTGnJz2io${ii-8e-~AD&lIrLWQ|~;bavRNAB{S0)Jq6T!^Flsi*riH zpK>IB47|m4rR|lCOfJyvJ`CY${lcOb2UZ$)=L&W!79G^WAXl~9#%kjgT<6<3Q@NMO0t^9SOFf>Hng