You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			94 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
# Copyright 2015 The Chromium 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 recipe_engine import recipe_test_api
 | 
						|
 | 
						|
 | 
						|
class CIPDTestApi(recipe_test_api.RecipeTestApi):
 | 
						|
  def make_resolved_version(self, v):
 | 
						|
    if not v:
 | 
						|
      return '40-chars-fake-of-the-package-instance_id'
 | 
						|
    if len(v) == 40:
 | 
						|
      return v
 | 
						|
    # Truncate or pad to 40 chars.
 | 
						|
    prefix = 'resolved-instance_id-of-'
 | 
						|
    if len(v) + len(prefix) >= 40:
 | 
						|
      return '%s%s' % (prefix, v[:40-len(prefix)])
 | 
						|
    return '%s%s%s' % (prefix, v, '-' * (40 - len(prefix) - len(v)))
 | 
						|
 | 
						|
  def make_pin(self, package_name, version=None):
 | 
						|
    return {
 | 
						|
        'package': package_name,
 | 
						|
        'instance_id': self.make_resolved_version(version),
 | 
						|
    }
 | 
						|
 | 
						|
  def _resultify(self, result, error=None, retcode=None):
 | 
						|
    dic = {'result': result}
 | 
						|
    if error:
 | 
						|
      dic['error'] = error
 | 
						|
    return self.m.json.output(dic, retcode=retcode)
 | 
						|
 | 
						|
  def example_error(self, error, retcode=None):
 | 
						|
    return self._resultify(
 | 
						|
        result=None,
 | 
						|
        error=error,
 | 
						|
        retcode=1 if retcode is None else retcode)
 | 
						|
 | 
						|
  def example_build(self, package_name, version=None):
 | 
						|
    return self._resultify(self.make_pin(package_name, version))
 | 
						|
 | 
						|
  example_register = example_build
 | 
						|
 | 
						|
  def example_ensure(self, packages):
 | 
						|
    return self._resultify([self.make_pin(name, version)
 | 
						|
                            for name, version in sorted(packages.items())])
 | 
						|
 | 
						|
  def example_set_tag(self, package_name, version):
 | 
						|
    return self._resultify({
 | 
						|
        'package': package_name,
 | 
						|
        'pin': self.make_pin(package_name, version)
 | 
						|
    })
 | 
						|
 | 
						|
  example_set_ref = example_set_tag
 | 
						|
 | 
						|
  def example_search(self, package_name, instances=None):
 | 
						|
    if instances is None:
 | 
						|
      # Return one instance by default.
 | 
						|
      return self._resultify([self.make_pin(package_name)])
 | 
						|
    if isinstance(instances, int):
 | 
						|
      instances = ['instance_id_%i' % (i+1) for i in xrange(instances)]
 | 
						|
    return self._resultify([self.make_pin(package_name, instance)
 | 
						|
                            for instance in instances])
 | 
						|
 | 
						|
  def example_describe(self, package_name, version=None,
 | 
						|
                       test_data_refs=None, test_data_tags=None,
 | 
						|
                       user='user:44-blablbla@developer.gserviceaccount.com',
 | 
						|
                       tstamp=1446574210):
 | 
						|
    assert not test_data_tags or all(':' in tag for tag in test_data_tags)
 | 
						|
    return self._resultify({
 | 
						|
        'pin': self.make_pin(package_name, version),
 | 
						|
        'registered_by': user,
 | 
						|
        'registered_ts': tstamp,
 | 
						|
        'refs': [
 | 
						|
          {
 | 
						|
            'ref': ref,
 | 
						|
            'modified_by': user,
 | 
						|
            'modified_ts': tstamp,
 | 
						|
          }
 | 
						|
          for ref in (['latest'] if test_data_refs is None else test_data_refs)
 | 
						|
        ],
 | 
						|
        'tags': [
 | 
						|
          {
 | 
						|
            'tag': tag,
 | 
						|
            'registered_by': user,
 | 
						|
            'registered_ts': tstamp,
 | 
						|
          }
 | 
						|
          for tag in ([
 | 
						|
              'buildbot_build:some.waterfall/builder/1234',
 | 
						|
              'git_repository:https://chromium.googlesource.com/some/repo',
 | 
						|
              'git_revision:397a2597cdc237f3026e6143b683be4b9ab60540',
 | 
						|
          ] if test_data_tags is None else test_data_tags)
 | 
						|
        ],
 | 
						|
    })
 |