blob: 176920e1e95385613884a9c86742f6c3ada6399c [file] [log] [blame]
# Copyright 2014 The Native Client Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from mock import patch, Mock
import os
import tempfile
import common
from webports import error
from webports import package_index
from webports.configuration import Configuration
test_index = '''\
NAME=agg-demo
VERSION=0.1
LICENSE=BSD
DEPENDS=(agg)
BUILD_CONFIG=release
BUILD_ARCH=arm
BUILD_TOOLCHAIN=glibc
BUILD_SDK_VERSION=38
BUILD_NACLPORTS_REVISION=98765
BIN_URL=http://storage.googleapis.com/webports/builds/pepper_38/1414/packages/agg-demo_0.1_arm_glibc.tar.bz2
BIN_SIZE=10240
BIN_SHA1=f300618f52188a291804dd60d6a5e04361c0ffe6
NAME=agg-demo
VERSION=0.1
LICENSE=BSD
DEPENDS=(agg)
BUILD_CONFIG=release
BUILD_ARCH=i686
BUILD_TOOLCHAIN=glibc
BUILD_SDK_VERSION=38
BUILD_NACLPORTS_REVISION=98765
BIN_URL=http://storage.googleapis.com/webports/builds/pepper_38/1414/packages/agg-demo_0.1_i686_glibc.tar.bz2
BIN_SIZE=10240
BIN_SHA1=0cb0d2d1380831b38c2b8461528836aa7992435f
'''
test_info = '''\
NAME=foo
VERSION=bar
BUILD_ARCH=arm
BUILD_CONFIG=debug
BUILD_TOOLCHAIN=glibc
BUILD_SDK_VERSION=123
BUILD_NACLPORTS_REVISION=98765
'''
class TestPackageIndex(common.NaclportsTest):
def testParsingInvalid(self):
contents = 'FOO=bar\nBAR=baz\n'
expected_error = "Invalid key 'FOO' in info file dummy_file:1"
with self.assertRaisesRegexp(error.Error, expected_error):
package_index.PackageIndex('dummy_file', contents)
def testParsingValid(self):
index = package_index.PackageIndex('dummy_file', test_index)
arm_config = Configuration('arm', 'glibc', False)
i686_config = Configuration('i686', 'glibc', False)
self.assertEqual(len(index.packages), 2)
self.assertTrue(index.Contains('agg-demo', arm_config))
self.assertTrue(index.Contains('agg-demo', i686_config))
def testContains(self):
# Create an empty package index and add a single entry to it
index = package_index.PackageIndex('dummy_file', '')
config_debug = Configuration('arm', 'glibc', True)
config_release = Configuration('arm', 'glibc', False)
self.assertFalse(index.Contains('foo', config_release))
index.packages[('foo', config_release)] = {
'NAME': 'dummy',
'BUILD_SDK_VERSION': 123
}
with patch('webports.util.GetSDKVersion') as mock_version:
# Setting the mock SDK version to 123 should mean that the
# index contains the 'foo' package and it is installable'
mock_version.return_value = 123
self.assertTrue(index.Contains('foo', config_release))
self.assertTrue(index.Installable('foo', config_release))
# Setting the mock SDK version to some other version should
# mean the index contains that package but it is not installable.
mock_version.return_value = 124
self.assertTrue(index.Contains('foo', config_release))
self.assertFalse(index.Installable('foo', config_release))
self.assertFalse(index.Contains('foo', config_debug))
self.assertFalse(index.Contains('bar', config_release))
@patch('webports.util.Log', Mock())
@patch('webports.package_index.PREBUILT_ROOT', os.getcwd())
@patch('webports.util.VerifyHash', Mock())
@patch('webports.util.DownloadFile')
def testDownload(self, download_file_mock):
index = package_index.PackageIndex('dummy_file', test_index)
arm_config = Configuration('arm', 'glibc', False)
index.Download('agg-demo', arm_config)
self.assertEqual(download_file_mock.call_count, 1)
@patch('webports.util.HashFile', Mock(return_value='sha1'))
@patch('os.path.getsize', Mock(return_value=100))
def testWriteIndex(self):
temp_file = tempfile.mkstemp('webports_test')[1]
self.addCleanup(os.remove, temp_file)
with patch('webports.package_index.ExtractPkgInfo',
Mock(return_value=test_info)):
package_index.WriteIndex(temp_file, (('pkg1', 'url1'), ('pkg2', 'url2')))