Class CacheTest
In: lib/cache.rb
Parent: Test::Unit::TestCase

Methods

Public Instance methods

[Source]

# File lib/cache.rb, line 307
  def test_nested_write
    TempPath.new('cache') do |repo|
      cache = nil
      assert_nothing_raised { cache = Cache.new(repo) }
      assert_equal(0, cache.nb_files, 'bad nb_files')
      assert_equal(0, cache.size)

      data = [ "toto\n", "tata\n" ]
      d1 = data.dup
      p1 = cache.open(nil, 'w') do
        d2 = data.dup
        p2 = cache.open(nil, 'w') do
          d2.shift
        end
        d1.shift
      end

      assert(p1)
      assert(p1.exist?, 'file exist?')
      assert_equal(p1.md5sum.to_s, p1.basename.to_s, 'bad md5 open')
      assert_equal(1, cache.nb_files, 'bad nb_files')
      assert_equal(p1, cache[0])
      assert_equal(10, cache.size)
      assert_equal(p1, cache.present?(p1.basename))
    end
  end

Tests

[Source]

# File lib/cache.rb, line 179
  def test_simple
    # FIXME factor me using #setup, #teardown, and @cache instead of cache.
    TempPath.new('cache') do |repo|
      cache = nil
      assert_nothing_raised { cache = Cache.new(repo) }
      assert_equal(0, cache.nb_files, 'bad nb_files')
      assert_nothing_raised { cache.create }
      assert_equal(0, cache.nb_files, 'bad nb_files')
      assert_nothing_raised { cache.clear }
      assert_equal(0, cache.nb_files, 'bad nb_files')
      assert_nothing_raised { cache.create }
      assert_equal(0, cache.nb_files, 'bad nb_files')
      assert_raises(Errno::ENOENT) { cache.open('toto', 'r') { |f| f.gets } }
      assert_equal(0, cache.nb_files, 'bad nb_files')
      assert_equal(0, cache.size)

      data = [ "toto\n", "tata\n" ]
      p1 = cache.open(nil, 'w') do
        data.shift
      end
      assert(p1)
      assert_equal(p1.md5sum.to_s, p1.basename.to_s, 'bad md5 open')
      assert_equal(1, cache.nb_files, 'bad nb_files')
      assert_equal(p1, cache[0])
      assert_equal(10, cache.size)
      assert_equal(p1, cache.present?(p1.basename))
      tmp_p = cache.read(p1) do |f|
        assert_equal("toto\n", f.gets)
        assert_equal("tata\n", f.gets)
        assert(f.eof?)
      end
      assert_equal(tmp_p, p1)
      # FIXME check_atime(cache)
      assert_equal(1, cache.nb_files, 'bad nb_files')
      assert(cache.present?(p1))
      assert_equal(p1, cache[0])
      assert(! cache.present?('foo'))

      # FIXME man printf + Tempfile + File::md5sum
      #       fixtures/foo.txt + TempPath + Path#md5sum
      tmp_file = Tempfile.new('cache')
      system("man printf > #{tmp_file.path} 2> /dev/null")
      md5 = File.md5sum(tmp_file.path)
      p2 = cache.import(tmp_file.path)
      assert_equal(md5.to_s, p2.basename.to_s, 'bad name after import')
      assert(p2.exist?, 'file do not exist after import')
      assert(FileUtils.cmp(tmp_file.path, p2.to_s), 'bad import')
      assert_equal(md5.to_s, File.md5sum(p2.to_s).to_s, 'bad md5 import')
      tmp_file.delete
      assert_equal(2, cache.nb_files, 'bad nb_files')
      assert_equal(p2, cache[1])
      check_atime(cache)

      data = [ "foo\n", "bar\n" ]
      p3 = cache.open(nil, 'w') do
        data.shift
      end
      assert_equal(File.md5sum(p3.to_s).to_s, p3.basename.to_s, 'bad md5 open')
      assert_equal(3, cache.nb_files, 'bad nb_files')
      assert_equal(p3, cache[2])
      assert_equal(p3, cache.present?(p3.basename))

      assert_equal(p1, cache[0], 'p1 first')
      assert_equal(p2, cache[1], 'p2 second')
      assert_equal(p3, cache[2], 'p3 third')
      assert_equal(p1, cache.read(p1) { |f| f.gets })
      assert_equal(p2, cache[0], 'p2 first')
      assert_equal(p3, cache[1], 'p3 second')
      assert_equal(p1, cache[2], 'p1 third')
      # FIXME check_atime(cache)
      assert_equal(3, cache.nb_files, 'bad nb_files')


      new_cache = nil
      assert_nothing_raised { new_cache = Cache.new(repo) }
      assert_equal(3, new_cache.nb_files, 'bad nb_files in new cache')
      check_atime(new_cache)
      assert_equal(cache.size, new_cache.size)

      assert_equal(3, cache.nb_files, 'bad nb_files')
      assert(cache.size > 1024)
      cache.max_size = 1024
      assert(cache.size < 1024)
      assert_equal(p1.size + p3.size, cache.size)
      assert_equal(2, cache.nb_files, 'bad nb_files')
      assert_equal(p3, cache[0], 'p3 first')
      assert_equal(p1, cache[1], 'p1 second')

      cache.clear
      assert_equal(0, cache.nb_files, 'bad nb_files')
      assert_equal(0, cache.size)
    end
  end

[Source]

# File lib/cache.rb, line 273
  def test_write_twice_the_same
    TempPath.new('cache') do |repo|
      cache = nil
      assert_nothing_raised { cache = Cache.new(repo) }
      assert_equal(0, cache.nb_files, 'bad nb_files')
      assert_equal(0, cache.size)

      data = [ "toto\n", "tata\n" ]
      d = data.dup
      p1 = cache.open(nil, 'w') do
        d.shift
      end

      assert_kind_of(Pathname, p1)
      assert_equal(p1.md5sum.to_s, p1.basename.to_s, 'bad md5 open')
      assert_equal(1, cache.nb_files, 'bad nb_files')
      assert_equal(p1, cache[0])
      assert_equal(10, cache.size)
      assert_equal(p1, cache.present?(p1.basename))

      data = [ "toto\n", "tata\n" ]
      d = data.dup
      p2 = cache.open(nil, 'w') do
        d.shift
      end

      assert_equal(File.md5sum(p1.to_s).to_s, p1.basename.to_s, 'bad md5 open')
      assert_equal(1, cache.nb_files, 'bad nb_files')
      assert_equal(p1, cache[0])
      assert_equal(10, cache.size)
      assert_equal(p1, cache.present?(p1.basename))
    end
  end

Protected Instance methods

Utilities

[Source]

# File lib/cache.rb, line 338
  def check_atime(cache)
    j = 0
    for i in 1...cache.nb_files do
      assert(cache[j].atime <= cache[i].atime, "bad atime order for #{i}")
      j = i
    end
  end

[Validate]