diff --git a/lib/common_passwords/common_passwords.rb b/lib/common_passwords/common_passwords.rb index 885290f5087..e2f9b3e600e 100644 --- a/lib/common_passwords/common_passwords.rb +++ b/lib/common_passwords/common_passwords.rb @@ -30,7 +30,7 @@ class CommonPasswords def self.password_list @mutex.synchronize do - load_passwords unless redis.exists(LIST_KEY) + load_passwords unless redis.scard(LIST_KEY) > 0 end RedisPasswordList.new end diff --git a/spec/components/common_passwords/common_passwords_spec.rb b/spec/components/common_passwords/common_passwords_spec.rb index 35513f7a424..fc7e101c81e 100644 --- a/spec/components/common_passwords/common_passwords_spec.rb +++ b/spec/components/common_passwords/common_passwords_spec.rb @@ -41,8 +41,9 @@ describe CommonPasswords do it "loads the passwords file if redis doesn't have it" do mock_redis = mock("redis") mock_redis.stubs(:exists).returns(false) + mock_redis.stubs(:scard).returns(0) described_class.stubs(:redis).returns(mock_redis) - described_class.expects(:load_passwords).returns([]) + described_class.expects(:load_passwords).returns(['password']) list = described_class.password_list list.should respond_to(:include?) end @@ -50,16 +51,27 @@ describe CommonPasswords do it "doesn't load the passwords file if redis has it" do mock_redis = mock("redis") mock_redis.stubs(:exists).returns(true) + mock_redis.stubs(:scard).returns(5000) described_class.stubs(:redis).returns(mock_redis) described_class.expects(:load_passwords).never list = described_class.password_list list.should respond_to(:include?) end + + it "loads the passwords file if redis has an empty list" do + mock_redis = mock("redis") + mock_redis.stubs(:exists).returns(true) + mock_redis.stubs(:scard).returns(0) + described_class.stubs(:redis).returns(mock_redis) + described_class.expects(:load_passwords).returns(['password']) + list = described_class.password_list + list.should respond_to(:include?) + end end context "missing password file" do it "tolerates it" do - described_class.stubs(:redis).returns(stub_everything(sismember: false)) + described_class.stubs(:redis).returns(stub_everything(sismember: false, exists: false, scard: 0)) File.stubs(:readlines).with(described_class::PASSWORD_FILE).raises(Errno::ENOENT) described_class.common_password?("password").should eq(false) end