bitbake: toaster: tests Automated build-mode backend tests

Add tests to check various backend scenarios that
require UI interaction.

Add necessary files for above tests (the sqlite file
and the default config json).

(Bitbake rev: 8dcad75ad1d9b8adddeca57e996b8d904b209df5)

Signed-off-by: Mihail Stanciu <stanciux.mihail@intel.com>
Signed-off-by: Elliot Smith <elliot.smith@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Mihail Stanciu 2015-12-07 15:53:00 +00:00 committed by Richard Purdie
parent 0497b570e5
commit fe8a0a3697
3 changed files with 384 additions and 1 deletions

View File

@ -0,0 +1 @@
../../../../../../toaster.sqlite

View File

@ -23,13 +23,14 @@
# step 2 - 3 needs to be run manually
import unittest, time, re, sys, getopt, os, logging, string, errno, exceptions
import shutil, argparse, ConfigParser, platform
import shutil, argparse, ConfigParser, platform, json
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium import selenium
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
import sqlite3 as sqlite
###########################################
@ -1814,3 +1815,383 @@ class toaster_cases(toaster_cases_base):
if not self.is_text_present("Toaster Manual"):
self.assertFalse(True, msg=("please check [Toaster manual] link on page"))
####################################################################################################
# Starting backend tests ###########################################################################
####################################################################################################
##############
# CASE 1066 #
##############
def test_1066(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select count(name) from orm_project a, auth_user b where a.user_id = b.id and b.username='_anonuser';"
cursor.execute(query)
data = cursor.fetchone()
self.failUnless(data >= 1)
##############
# CASE 1071 #
##############
def test_1071(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select name from orm_release;"
cursor.execute(query)
data = cursor.fetchall()
for i in range(0,4):
data[i] = data[i][0]
data.sort()
print data
json_parse = json.loads(open('toasterconf.json').read())
json_data = []
for i in range (0,4):
json_data.append(json_parse['releases'][i]['name'])
json_data.sort()
print json_data
self.failUnless(data == json_data)
##############
# CASE 1072 #
##############
def test_1072(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select value from orm_toastersetting where name like 'DEFCONF%';"
cursor.execute(query)
data = cursor.fetchall()
for i in range(0,6):
data[i] = data[i][0]
print data
json_parse = json.loads(open('toasterconf.json').read())
json_data=json_parse['config']
json_data = json_data.values()
print json_data
self.failUnless(data == json_data)
##############
# CASE 1074 #
##############
def test_1074(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select name from orm_layersource;"
cursor.execute(query)
data = cursor.fetchall()
for i in range(0,3):
data[i] = data[i][0]
print data
json_parse = json.loads(open('toasterconf.json').read())
json_data = []
for i in range(0,3):
json_data.append(json_parse['layersources'][i]['name'])
print json_data
self.failUnless(set(data) == set(json_data))
##############
# CASE 1075 #
##############
def test_1075(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select value from orm_toastersetting where name like 'DEFAULT_RELEASE';"
cursor.execute(query)
data = cursor.fetchall()
data = data[0][0]
print data
json_parse = json.loads(open('toasterconf.json').read())
json_data = json_parse['defaultrelease']
print json_data
self.failUnless(set(data) == set(json_data))
##############
# CASE 1076 #
##############
def test_1076(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
print 'Checking branches for "Local Yocto Project"'
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select name from orm_branch where layer_source_id=1;"
cursor.execute(query)
data = cursor.fetchall()
for i in range(0,4):
data[i] = data[i][0]
print data
json_parse = json.loads(open('toasterconf.json').read())
json_data = json_parse['layersources'][0]['branches']
print json_data
self.failUnless(set(data) == set(json_data))
print 'Checking branches for "OpenEmbedded"'
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select name from orm_branch where layer_source_id=2;"
cursor.execute(query)
data = cursor.fetchall()
for i in range(0,3):
data[i] = data[i][0]
print data
json_parse = json.loads(open('toasterconf.json').read())
json_data = json_parse['layersources'][1]['branches']
print json_data
self.failUnless(set(data) == set(json_data))
print 'Checking branches for "Imported layers"'
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select name from orm_branch where layer_source_id=3;"
cursor.execute(query)
data = cursor.fetchall()
for i in range(0,4):
data[i] = data[i][0]
print data
json_parse = json.loads(open('toasterconf.json').read())
json_data = json_parse['layersources'][2]['branches']
print json_data
self.failUnless(set(data) == set(json_data))
##############
# CASE 1077 #
##############
def test_1077(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select name from orm_bitbakeversion;"
cursor.execute(query)
data = cursor.fetchall()
for i in range(0,4):
data[i] = data[i][0]
print data
json_parse = json.loads(open('toasterconf.json').read())
json_data = []
for i in range(0,4):
json_data.append(json_parse['bitbake'][i]['name'])
print json_data
self.failUnless(set(data) == set(json_data))
##############
# CASE 1083 #
##############
def test_1083(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
self.driver.maximize_window()
self.driver.get(self.base_url)
self.driver.find_element_by_id("new-project-button").click()
self.driver.find_element_by_id("new-project-name").send_keys("new-test-project")
self.driver.find_element_by_id("create-project-button").click()
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select count(name) from orm_project where name = 'new-test-project';"
cursor.execute(query)
data = cursor.fetchone()
print 'data: %s' % data
self.failUnless(data >= 1)
##############
# CASE 1084 #
##############
def test_1084(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
self.driver.maximize_window()
self.driver.get(self.base_url)
self.driver.find_element_by_id("new-project-button").click()
self.driver.find_element_by_id("new-project-name").send_keys("new-default-project")
self.driver.find_element_by_id("create-project-button").click()
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select a.name from orm_release a, orm_project b where a.id = b.release_id and b.name = 'new-default-project' limit 1;"
cursor.execute(query)
db_data = str(cursor.fetchone()[0])
json_parse = json.loads(open('toasterconf.json').read())
json_data = str(json_parse['defaultrelease'])
self.failUnless(db_data == json_data)
##############
# CASE 1088 #
##############
def test_1088(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
self.driver.maximize_window()
self.driver.get(self.base_url)
self.driver.find_element_by_css_selector("a[href='/toastergui/projects/']").click()
self.driver.find_element_by_link_text('new-default-project').click()
self.driver.find_element_by_id('project-change-form-toggle').click()
self.driver.find_element_by_id('project-name-change-input').clear()
self.driver.find_element_by_id('project-name-change-input').send_keys('new-name')
self.driver.find_element_by_id('project-name-change-btn').click()
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select count(name) from orm_project where name = 'new-name';"
cursor.execute(query)
data = cursor.fetchone()[0]
self.failUnless(data == 1)
#reseting project name
self.driver.find_element_by_id('project-change-form-toggle').click()
self.driver.find_element_by_id('project-name-change-input').clear()
self.driver.find_element_by_id('project-name-change-input').send_keys('new-default-project')
self.driver.find_element_by_id('project-name-change-btn').click()
##############
# CASE 1089 #
##############
def test_1089(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
self.driver.maximize_window()
self.driver.get(self.base_url)
self.driver.find_element_by_css_selector("a[href='/toastergui/projects/']").click()
self.driver.find_element_by_link_text('new-default-project').click()
self.driver.find_element_by_id('change-machine-toggle').click()
self.driver.find_element_by_id('machine-change-input').clear()
self.driver.find_element_by_id('machine-change-input').send_keys('qemuarm64')
self.driver.find_element_by_id('machine-change-input').send_keys(Keys.RETURN)
self.driver.find_element_by_id('machine-change-btn').click()
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select count(id) from orm_projectvariable where name like 'machine' and value like 'qemuarm64';"
cursor.execute(query)
data = cursor.fetchone()[0]
self.failUnless(data == 1)
#resetting machine to default value
self.driver.find_element_by_id('change-machine-toggle').click()
self.driver.find_element_by_id('machine-change-input').clear()
self.driver.find_element_by_id('machine-change-input').send_keys('qemux86')
self.driver.find_element_by_id('machine-change-input').send_keys(Keys.RETURN)
self.driver.find_element_by_id('machine-change-btn').click()
##############
# CASE 1090 #
##############
def test_1090(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select username from auth_user where is_superuser = 1;"
cursor.execute(query)
data = cursor.fetchall()
try:
data = data[0]
except:
pass
print data
self.failUnless(data == 'toaster_admin')
##############
# CASE 1091 #
##############
def test_1091(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
self.driver.maximize_window()
self.driver.get(self.base_url)
self.driver.find_element_by_css_selector("a[href='/toastergui/projects/']").click()
self.driver.find_element_by_link_text('new-default-project').click()
self.driver.find_element_by_id('release-change-toggle').click()
dropdown = self.driver.find_element_by_css_selector('select')
for option in dropdown.find_elements_by_tag_name('option'):
if option.text == 'Local Yocto Project':
option.click()
self.driver.find_element_by_id('change-release-btn').click()
#wait for the changes to register in the DB
time.sleep(1)
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select count(*) from orm_layer_version a, orm_projectlayer b, orm_project c where a.\"commit\"=\"HEAD\" and a.id = b.layercommit_id and b.project_id=c.id and c.name='new-default-project';"
cursor.execute(query)
data = cursor.fetchone()[0]
#resetting release to default
self.driver.find_element_by_id('release-change-toggle').click()
dropdown = self.driver.find_element_by_css_selector('select')
for option in dropdown.find_elements_by_tag_name('option'):
if option.text == 'Yocto Project master':
option.click()
self.driver.find_element_by_id('change-release-btn').click()
#wait for the changes to register in the DB
time.sleep(1)
self.failUnless(data == 3)
##############
# CASE 1092 #
##############
def test_1092(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
self.driver.maximize_window()
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select a.name, a.value from orm_projectvariable a, orm_project b where a.project_id = b.id and b.name = 'new-default-project';"
cursor.execute(query)
data = dict(cursor.fetchall())
print data
default_values = {u'IMAGE_INSTALL_append': u'', u'PACKAGE_CLASSES': u'package_rpm', u'MACHINE': u'qemux86', u'SDKMACHINE': u'x86_64', u'DISTRO': u'poky', u'IMAGE_FSTYPES': u'ext3 jffs2 tar.bz2'}
self.failUnless(data == default_values)
##############
# CASE 1093 #
##############
def test_1093(self):
self.case_no = self.get_case_number()
self.log.info(' CASE %s log: ' % str(self.case_no))
#get initial values
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select layercommit_id from orm_projectlayer a, orm_project b where a.project_id=b.id and b.name='new-default-project';"
cursor.execute(query)
data_initial = cursor.fetchall()
print data_initial
self.driver.maximize_window()
self.driver.get('localhost:8000')#self.base_url)
self.driver.find_element_by_css_selector("a[href='/toastergui/projects/']").click()
self.driver.find_element_by_link_text('new-default-project').click()
self.driver.find_element_by_id('release-change-toggle').click()
dropdown = self.driver.find_element_by_css_selector('select')
for option in dropdown.find_elements_by_tag_name('option'):
if option.text == 'Local Yocto Project':
option.click()
self.driver.find_element_by_id('change-release-btn').click()
#wait for the changes to register in the DB
time.sleep(1)
#get changed values
con=sqlite.connect('toaster.sqlite')
cursor = con.cursor()
query = "select layercommit_id from orm_projectlayer a, orm_project b where a.project_id=b.id and b.name='new-default-project';"
cursor.execute(query)
data_changed = cursor.fetchall()
print data_changed
#resetting release to default
self.driver.find_element_by_id('release-change-toggle').click()
dropdown = self.driver.find_element_by_css_selector('select')
for option in dropdown.find_elements_by_tag_name('option'):
if option.text == 'Yocto Project master':
option.click()
self.driver.find_element_by_id('change-release-btn').click()
#wait for the changes to register in the DB
time.sleep(1)
self.failUnless(data_initial != data_changed)

View File

@ -0,0 +1 @@
../../../../../../meta-yocto/conf/toasterconf.json