Sha256: 96973ce941a57cf7a61c104b8272648d61b5c94b8d5107195b6cacfd6fa891f9

Contents?: true

Size: 1.92 KB

Versions: 3

Compression:

Stored size: 1.92 KB

Contents

require 'spec_helper'

require 'slosilo/adapters/file_adapter'

describe Slosilo::Adapters::FileAdapter do
  let(:dir) {
    require 'tmpdir' 
    Dir.mktmpdir 
  }
  let(:adapter) { Slosilo::Adapters::FileAdapter.new dir }
  subject { adapter }
  
  describe "#get_key" do
    context "when given key does not exist" do
      it "returns nil" do
        subject.get_key(:whatever).should_not be
      end
    end
  end
  
  describe "#put_key" do
    let(:key) { "key" }
    context "unacceptable id" do
      let(:id) { "foo.bar" }
      it "isn't accepted" do
        lambda { subject.put_key id, key }.should raise_error
      end    
    end
    context "acceptable id" do
      let(:id) { "id" }
      let(:key_encrypted) { "encrypted key" }
      let(:fname) { "#{dir}/#{id}.key" }
      it "creates the key" do
        Slosilo::EncryptedAttributes.should_receive(:encrypt).with(key).and_return key_encrypted
        File.should_receive(:write).with(fname, key_encrypted)
        File.should_receive(:chmod).with(0400, fname)
        subject.put_key id, key
        subject.instance_variable_get("@keys")[id].should == key
      end    
    end
  end
  
  describe "#each" do
    before { adapter.instance_variable_set("@keys", one: :onek, two: :twok) }
    
    it "iterates over each key" do
      results = []
      adapter.each { |id,k| results << { id => k } }
      results.should == [ { one: :onek}, {two: :twok } ]
    end
  end
  
  describe 'key store' do
    let(:key) { 'fake key' }
    let(:id) { 'some id' }

    before do
      Slosilo::encryption_key = Slosilo::Symmetric.new.random_key
      pre_adapter = Slosilo::Adapters::FileAdapter.new dir
      pre_adapter.put_key(id, key)
    end
      
    it "loads and decrypts the key" do
      adapter.get_key(id).should == key
    end
    it "enumerates the keys" do
      results = []
      adapter.each { |id,k| results << { id => k } }
      results.should == [ { id => key } ]
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
slosilo-0.2.4 spec/file_adapter_spec.rb
slosilo-0.2.3 spec/file_adapter_spec.rb
slosilo-0.2.2 spec/file_adapter_spec.rb