115 lines
4.6 KiB
Python
115 lines
4.6 KiB
Python
|
#!/usr/bin/env python
|
||
|
#-*- coding: utf-8 -*-
|
||
|
# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
|
||
|
#
|
||
|
# Use of this source code is governed by a BSD-style license
|
||
|
# that can be found in the LICENSE file in the root of the source
|
||
|
# tree. An additional intellectual property rights grant can be found
|
||
|
# in the file PATENTS. All contributing project authors may
|
||
|
# be found in the AUTHORS file in the root of the source tree.
|
||
|
|
||
|
__author__ = 'phoglund@webrtc.org (Patrik Höglund)'
|
||
|
|
||
|
import unittest
|
||
|
from google.appengine.ext import db
|
||
|
from google.appengine.ext import testbed
|
||
|
|
||
|
from add_build_status_data import BuildStatusData
|
||
|
import load_build_status
|
||
|
|
||
|
class LoadBuildStatusTest(unittest.TestCase):
|
||
|
def setUp(self):
|
||
|
# First, create an instance of the Testbed class.
|
||
|
self.testbed = testbed.Testbed()
|
||
|
# Then activate the testbed, which prepares the service stubs for use.
|
||
|
self.testbed.activate()
|
||
|
# Next, declare which service stubs you want to use.
|
||
|
self.testbed.init_datastore_v3_stub()
|
||
|
|
||
|
def test_returns_latest_nonbuilding_entries_when_loading_build_status(self):
|
||
|
BuildStatusData(bot_name="Bot1", revision=17,
|
||
|
build_number=499, status="OK").put()
|
||
|
BuildStatusData(bot_name="Bot2", revision=17,
|
||
|
build_number=505, status="OK").put()
|
||
|
BuildStatusData(bot_name="Bot3", revision=17,
|
||
|
build_number=344, status="failed").put()
|
||
|
BuildStatusData(bot_name="Bot1", revision=18,
|
||
|
build_number=499, status="building").put()
|
||
|
BuildStatusData(bot_name="Bot2", revision=18,
|
||
|
build_number=505, status="failed").put()
|
||
|
BuildStatusData(bot_name="Bot3", revision=18,
|
||
|
build_number=344, status="OK").put()
|
||
|
|
||
|
loader = load_build_status.BuildStatusLoader()
|
||
|
result = loader.load_build_status_data()
|
||
|
|
||
|
self.assertEqual(3, len(result))
|
||
|
|
||
|
# We make no guarantees on order, but we can use the fact that the testbed
|
||
|
# is deterministic to evaluate that the corrects bots were selected like so:
|
||
|
self.assertEqual("Bot1", result[0].bot_name)
|
||
|
self.assertEqual(17, result[0].revision)
|
||
|
self.assertEqual("OK", result[0].status)
|
||
|
|
||
|
self.assertEqual("Bot3", result[1].bot_name)
|
||
|
self.assertEqual(18, result[1].revision)
|
||
|
self.assertEqual("OK", result[1].status)
|
||
|
|
||
|
self.assertEqual("Bot2", result[2].bot_name)
|
||
|
self.assertEqual(18, result[2].revision)
|
||
|
self.assertEqual("failed", result[2].status)
|
||
|
|
||
|
def test_returns_lkgr_for_single_green_revision(self):
|
||
|
BuildStatusData(bot_name="Bot1", revision=17,
|
||
|
build_number=499, status="OK").put()
|
||
|
BuildStatusData(bot_name="Bot2", revision=17,
|
||
|
build_number=505, status="OK").put()
|
||
|
BuildStatusData(bot_name="Bot3", revision=17,
|
||
|
build_number=344, status="OK").put()
|
||
|
|
||
|
loader = load_build_status.BuildStatusLoader()
|
||
|
self.assertEqual(17, loader.compute_lkgr())
|
||
|
|
||
|
def test_returns_correct_lkgr_with_most_recent_revision_failed(self):
|
||
|
BuildStatusData(bot_name="Bot1", revision=17,
|
||
|
build_number=499, status="OK").put()
|
||
|
BuildStatusData(bot_name="Bot2", revision=17,
|
||
|
build_number=505, status="OK").put()
|
||
|
BuildStatusData(bot_name="Bot3", revision=17,
|
||
|
build_number=344, status="OK").put()
|
||
|
BuildStatusData(bot_name="Bot1", revision=18,
|
||
|
build_number=499, status="OK").put()
|
||
|
BuildStatusData(bot_name="Bot2", revision=18,
|
||
|
build_number=505, status="failed").put()
|
||
|
BuildStatusData(bot_name="Bot3", revision=18,
|
||
|
build_number=344, status="OK").put()
|
||
|
|
||
|
loader = load_build_status.BuildStatusLoader()
|
||
|
self.assertEqual(17, loader.compute_lkgr())
|
||
|
|
||
|
def test_returns_none_if_no_revisions(self):
|
||
|
loader = load_build_status.BuildStatusLoader()
|
||
|
self.assertEqual(None, loader.compute_lkgr())
|
||
|
|
||
|
def test_returns_none_if_no_green_revisions(self):
|
||
|
BuildStatusData(bot_name="Bot2", revision=18,
|
||
|
build_number=505, status="failed").put()
|
||
|
|
||
|
loader = load_build_status.BuildStatusLoader()
|
||
|
self.assertEqual(None, loader.compute_lkgr())
|
||
|
|
||
|
def test_skips_partially_building_revisions(self):
|
||
|
BuildStatusData(bot_name="Bot1", revision=18,
|
||
|
build_number=499, status="building").put()
|
||
|
BuildStatusData(bot_name="Bot2", revision=18,
|
||
|
build_number=505, status="OK").put()
|
||
|
BuildStatusData(bot_name="Bot1", revision=17,
|
||
|
build_number=344, status="OK").put()
|
||
|
|
||
|
loader = load_build_status.BuildStatusLoader()
|
||
|
self.assertEqual(17, loader.compute_lkgr())
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
unittest.main()
|