view Makefile @ 171:1d7ab9111fd2

- added tests ported to the new framework (package org.thermostat.qa2.tests) - added/updated required targets in Makefile - new info about dependecies added to README.md - authorization and error checking code added to mongo js scripts - done necessary changes to reporter, so it can be used with new framework - updated keyrings - added required pattern (for gui tests)
author Zdenek Zambersky <zzambers@redhat.com>
date Tue, 10 Mar 2015 13:48:12 +0100
parents 7baba5d67a16
children 661ca2d7795f
line wrap: on
line source

#   ThermostatQA
# 
#    Copyright (C) 2013  Red Hat
# 

SOURCE_DIR=src
BUILD_DIR=$(shell realpath -m bin)
CLASSES_DIR=$(BUILD_DIR)/classes
CLASSES_TEMP_DIR=$(BUILD_DIR)/.classes
REPORT_DIR=reports
LOGS_DIR=logs
TEMPLATE_DIR=templates
SCREENSHOTS_DIR=screenshots

JAVAC=javac
JAVA=java

DAILY_REPORT_NAME=daily_report.txt

#JAVA=/opt/jdk1.7.0_07/bin/java

ROOT_PACKAGE=org/thermostat/qa
ANNOTATIONS_PACKAGE=$(ROOT_PACKAGE)/annotations
COMMON_PACKAGE=$(ROOT_PACKAGE)/common
FRAMEWORK_PACKAGE=$(ROOT_PACKAGE)/framework
REPORTER_PACKAGE=$(ROOT_PACKAGE)/reporter
TEST_PACKAGE=org/thermostat/qa2/tests

FLOTR_NAME=prototype.flotr-0.2.0-alpha
FLOTR_ARCHIVE=$(FLOTR_NAME).zip
FLOTR_ADDRESS=http://flotr.googlecode.com/files/$(FLOTR_ARCHIVE)
FLOTR_DIR=$(BUILD_DIR)/flotr
FLOTR_LIB_DIR=$(FLOTR_DIR)/lib

TOMCAT_VERSION=7.0.59
TOMCAT_NAME=apache-tomcat-$(TOMCAT_VERSION)
TOMCAT_ARCHIVE=$(TOMCAT_NAME).tar.gz
TOMCAT_URL=http://apache.mirror.rafal.ca/tomcat/tomcat-$(shell echo "$(TOMCAT_VERSION)" | sed 's/\..*//g' )/v$(TOMCAT_VERSION)/bin/$(TOMCAT_ARCHIVE)
TOMCAT_DIR=$(BUILD_DIR)/$(TOMCAT_NAME)

THERMOSTAT_VERSION=1.1.0
THERMOSTAT_REPO_URL=http://icedtea.classpath.org/hg/thermostat/
THERMOSTAT_USER_DIR=$(BUILD_DIR)/.thermostat
THERMOSTAT_DIR=$(BUILD_DIR)/thermostat
THERMOSTAT_WEB_DEPLOY_DIR=$(TOMCAT_DIR)/webapps/thermostat

SCREENSHOT_SOURCE=xvfb

GNOME_KEYRING_USER_DATA_DIR=$(shell realpath -m "$(BUILD_DIR)/.gnome-keyring" )

JAVADOC_DIR=$(REPORT_DIR)/javadoc

KILL_DAEMONS=0

DATE=`date +%Y-%0m-%0d`
	
# all *.java files in src directory
ALL_SOURCES = $(shell find src -name *.java | tr '\n' ' ')

# all testsuites ( in $(SOURCE_DIR)/$(TEST_PACKAGE) package )
TESTS = $(shell ls -1 $(SOURCE_DIR)/$(TEST_PACKAGE) | grep -v package-info.java | sed -n -e 's/\([A-Za-z0-9]*\)\.java/\1/p')


.PHONY: all
all: build runtests

#### clean ####

clean:
	rm -rf $(JAVADOC_DIR)
	rm -rf $(BUILD_DIR)

cleanlogs: clean_logs

clean_logs:
	rm -rf $(LOGS_DIR)/$(DATE)

clean_all_logs:
	rm -rf $(LOGS_DIR)
	
clean_all:
	rm -rf $(JAVADOC_DIR)
	rm -rf $(BUILD_DIR)
	rm -rf $(SCREENSHOTS_DIR)
	rm -rf $(LOGS_DIR)

#### build ####

.PHONY: build
build: $(CLASSES_DIR)
	
$(BUILD_DIR):
	mkdir -p $(BUILD_DIR)

$(CLASSES_DIR): | ${BUILD_DIR}
	rm -rf $(CLASSES_TEMP_DIR)
	mkdir -p $(CLASSES_TEMP_DIR)
	$(JAVAC) -d $(CLASSES_TEMP_DIR) -sourcepath $(SOURCE_DIR)/ $(ALL_SOURCES)
	mkdir -p $(shell dirname $(CLASSES_DIR) )
	mv -T $(CLASSES_TEMP_DIR) $(CLASSES_DIR)

#### test ####

.PHONY: runtests
runtests:	$(TESTS)

$(TESTS): build tomcat thermostat-build testwarning checkdeps $(THERMOSTAT_WEB_DEPLOY_DIR) | $(GNOME_KEYRING_USER_DATA_DIR)
	killall mongod &> /dev/null || true
	killall gnome-keyring-daemon &> /dev/null || true
	mkdir -p $(BUILD_DIR)/backup
	mkdir -p $(SCREENSHOTS_DIR)
	mkdir -p $(LOGS_DIR)
	mkdir -p $(LOGS_DIR)/$(DATE)
	USER_THERMOSTAT_HOME=$(THERMOSTAT_USER_DIR) \
	$(JAVA) -cp $(CLASSES_DIR) \
	-Dtomcat.home=$(TOMCAT_DIR) \
	-Dthermostat.home=$(THERMOSTAT_DIR)/distribution/target/image \
	-Dthermostat.user.home=$(THERMOSTAT_USER_DIR) \
	-Dthermostat.executable.name=thermostat \
	-Dthermostat.executable.path=$(THERMOSTAT_DIR)/distribution/target/image/bin \
	-Dthermostat.version=$(THERMOSTAT_VERSION) \
	-Dscreenshot.source=$(SCREENSHOT_SOURCE) \
	-Dclean.after.gui.test=true	\
	-Dgnome-keyring.config.path=$(GNOME_KEYRING_USER_DATA_DIR) \
	-Dbackup.path=$(BUILD_DIR)/backup \
	org.thermostat.qa2.framework.TestRunner org.thermostat.qa2.tests.$@ 2>&1 | tee $(LOGS_DIR)/$(DATE)/$@.log

.PHONY: testwarning
testwarning:
	@# if KILL_DAEMONS != 1 and mongo or gnome keyring is running
	@# warn user that they need to be killed
	@ps aux | grep -v "grep" | grep -q "mongod" ; \
	mongo=$$? ; \
	ps aux | grep -v "grep" | grep -q "gnome-keyring-daemon" ; \
	gnomekeyring=$$? ; \
	if [ $(KILL_DAEMONS) -eq 0 ] && [ $$mongo -eq 0 -o $$gnomekeyring -eq 0 ] ; then \
		echo "--------------------------------------------------------------------" ; \
		echo "This test suite runs mongo database and gnome-keyring daemons with" ; \
		echo "custom configuration, so it will kill any running instance of these" ; \
		echo "daemons before start of testing." ; \
		echo ; \
		while true; do \
			echo "Do you want to continue? (yes/no)" ; \
			read answer ; \
			case "$${answer}" in \
				yes) \
					break \
				;; \
				no) \
					echo "Canelling ..." ; \
					exit 1 \
				;; \
				*) \
					echo "unrecognized answer: $${answer}" ; \
					echo ; \
				;; \
			esac \
		done \
	fi ; \
	true

.PHONY: checkdeps
checkdeps:
	@which netstat &> /dev/null || { echo "netstat required by testsuite is missing please install it" ; false ; }
	@which xdotool &> /dev/null || { echo "xdotool required by testsuite is missing please install it" ; false ; }
	@which gnome-keyring-daemon &> /dev/null || { echo "gnome-keyring-daemon required by testsuite is missing please install it" ; false ; }
	@which import &> /dev/null || { echo "import (ImageMagick) required by testsuite is missing please install it" ; false ; }

.PHONY: listtests
listtests:
	for tst in $(TESTS); do \
	echo $$tst ; \
	done

#### reports & javadoc ####
	
report:	$(CLASSES_DIR) flotr javadoc
	mkdir -p $(REPORT_DIR)
	cp -u $(TEMPLATE_DIR)/style.css $(REPORT_DIR)/style.css
	cp -r $(FLOTR_DIR) $(REPORT_DIR)
	$(JAVA) -cp $(CLASSES_DIR) org.thermostat.qa.reporter.Reporter -template-dir=$(TEMPLATE_DIR) -log-dir=$(LOGS_DIR) -report-dir=$(REPORT_DIR) -date=$(DATE) -tests="$(TESTS)"
	sed -i 's/ignored/not applicable/g' $(REPORT_DIR)/log_$(DATE).html 
	sed -i 's/IGNORED/NOT APPLICABLE/g' $(REPORT_DIR)/log_$(DATE).html 
	links -dump $(REPORT_DIR)/index.html 2>/dev/null > $(REPORT_DIR)/$(DAILY_REPORT_NAME) || \
	w3m   -dump $(REPORT_DIR)/index.html 2>/dev/null > $(REPORT_DIR)/$(DAILY_REPORT_NAME) || \
	lynx  -dump $(REPORT_DIR)/index.html -force_html 2>/dev/null > $(REPORT_DIR)/$(DAILY_REPORT_NAME)
	echo "" >> $(REPORT_DIR)/$(DAILY_REPORT_NAME)
	echo "" >> $(REPORT_DIR)/$(DAILY_REPORT_NAME)
	links -dump $(REPORT_DIR)/log_$(DATE).html 2>/dev/null >> $(REPORT_DIR)/$(DAILY_REPORT_NAME) || \
	w3m   -dump $(REPORT_DIR)/log_$(DATE).html 2>/dev/null >> $(REPORT_DIR)/$(DAILY_REPORT_NAME) || \
	lynx  -dump $(REPORT_DIR)/log_$(DATE).html -force_html 2>/dev/null >> $(REPORT_DIR)/$(DAILY_REPORT_NAME)
	echo "" >> $(REPORT_DIR)/$(DAILY_REPORT_NAME)
	echo "" >> $(REPORT_DIR)/$(DAILY_REPORT_NAME)
	links -dump $(REPORT_DIR)/hist_10.html 2>/dev/null >> $(REPORT_DIR)/$(DAILY_REPORT_NAME) || \
	w3m   -dump $(REPORT_DIR)/hist_10.html 2>/dev/null >> $(REPORT_DIR)/$(DAILY_REPORT_NAME) || \
	lynx  -dump $(REPORT_DIR)/hist_10.html -force_html 2>/dev/null >> $(REPORT_DIR)/$(DAILY_REPORT_NAME)
	
javadoc:
	mkdir -p $(JAVADOC_DIR)
	javadoc -d $(JAVADOC_DIR) -classpath src org.thermostat.qa.testsuites
	cp -r patterns $(JAVADOC_DIR)/org/thermostat/qa/testsuites/
	cp -r scripts $(JAVADOC_DIR)/org/thermostat/qa/testsuites/

#### other ####

#create a directory outputtexts/versionN for the current version
#of the output_texts (can be found in the test.properties)
#generate output help messages into files
generatetexts:	$(ALL_CLASSES)
	mkdir -p outputtexts
	mkdir -p outputtexts/`cat test.properties | grep thermostat_version | sed -e 's/^.*=//g;s/$$//g'`
	$(JAVA) -cp $(CLASSES_DIR) org.thermostat.qa.framework.ThermostatOutputTextsGenerator

#make icons in given dir smaller / remove unnecessary pixels
cuticons:  $(ALL_CLASSES)
	$(JAVA) -cp $(CLASSES_DIR) org.thermostat.qa.framework.IconCut

#generate pattern defs on std output
patternsdef:  $(ALL_CLASSES)
	$(JAVA) -cp $(CLASSES_DIR) org.thermostat.qa.framework.PatternDefinitionsGenerator


#### OTHER SOFTWARE ####	
	
#### FLOTR ####
	
.PHONY: flotr
flotr:	$(FLOTR_DIR)/flotr-0.2.0-alpha.js $(FLOTR_LIB_DIR)/canvas2image.js $(FLOTR_LIB_DIR)/canvastext.js $(FLOTR_LIB_DIR)/prototype-1.6.0.2.js

$(FLOTR_DIR)/flotr-0.2.0-alpha.js: $(BUILD_DIR)/$(FLOTR_ARCHIVE)
	mkdir -p $(FLOTR_DIR)
	unzip -j -o $? flotr-0.2.0-alpha/flotr/flotr-0.2.0-alpha.js -d $(FLOTR_DIR)

$(FLOTR_LIB_DIR)/canvas2image.js: $(BUILD_DIR)/$(FLOTR_ARCHIVE)
	mkdir -p $(FLOTR_LIB_DIR)
	unzip -j -o $? flotr-0.2.0-alpha/flotr/lib/canvas2image.js -d $(FLOTR_LIB_DIR)

$(FLOTR_LIB_DIR)/canvastext.js: $(BUILD_DIR)/$(FLOTR_ARCHIVE)
	mkdir -p $(FLOTR_LIB_DIR)
	unzip -j -o $? flotr-0.2.0-alpha/flotr/lib/canvastext.js -d $(FLOTR_LIB_DIR)

$(FLOTR_LIB_DIR)/prototype-1.6.0.2.js: $(BUILD_DIR)/$(FLOTR_ARCHIVE)
	mkdir -p $(FLOTR_LIB_DIR)
	unzip -j -o $? flotr-0.2.0-alpha/flotr/lib/prototype-1.6.0.2.js -d $(FLOTR_LIB_DIR)

$(BUILD_DIR)/$(FLOTR_ARCHIVE):
	wget -P $(BUILD_DIR) $(FLOTR_ADDRESS)

#### TOMCAT ####

.PHONY: tomcat
tomcat: | $(TOMCAT_DIR)

$(TOMCAT_DIR): | $(BUILD_DIR)
	wget -P $(BUILD_DIR) $(TOMCAT_URL)
	tar xf $(BUILD_DIR)/$(TOMCAT_ARCHIVE) -C $(BUILD_DIR)
	if [ "$(BUILD_DIR)/$(TOMCAT_NAME)" != "$(TOMCAT_DIR)" ] ; then \
		mkdir -p "$(TOMCAT_DIR)" ; \
		mv -T "$(BUILD_DIR)/$(TOMCAT_NAME)" "$(TOMCAT_DIR)" ; \
	fi

#### THERMOSTAT ####
	
.PHONY: thermostat
thermostat: thermostat-build thermostat-setup


.PHONY: thermostat-setup
thermostat-setup: $(THERMOSTAT_WEB_DEPLOY_DIR) | $(THERMOSTAT_USER_DIR)/data/setup-complete.stamp

$(THERMOSTAT_USER_DIR)/data/setup-complete.stamp: | $(THERMOSTAT_USER_DIR) $(THERMOSTAT_DIR)/distribution/target/image
	# init storage and add agent-tester and client-tester users in custom user dir 	
	killall mongod || true
	export USER_THERMOSTAT_HOME=$(THERMOSTAT_USER_DIR) &&\
	if [ -f "$(THERMOSTAT_DIR)/distribution/target/image/bin/thermostat-devsetup" ] ; then \
		$(THERMOSTAT_DIR)/distribution/target/image/bin/thermostat-devsetup; \
	fi &&\
	$(THERMOSTAT_DIR)/distribution/target/image/bin/thermostat storage --start &&\
	echo -e \
		"use thermostat\n\
		db.auth(\"mongodevuser\", \"mongodevpassword\")\n\
		db.addUser(\"agent-tester\",\"heslo1\")\n\
		db.addUser(\"client-tester\",\"heslo2\")\n\
		exit\n" \
	| mongo 127.0.0.1:27518; \
	$(THERMOSTAT_DIR)/distribution/target/image/bin/thermostat storage --stop

$(THERMOSTAT_USER_DIR): | $(THERMOSTAT_DIR)
	mkdir -p $(THERMOSTAT_USER_DIR)
	
$(THERMOSTAT_WEB_DEPLOY_DIR): tomcat thermostat-build
	rm -rf $(THERMOSTAT_WEB_DEPLOY_DIR)
	mkdir -p $(THERMOSTAT_WEB_DEPLOY_DIR)
	cp -rT	"$$( echo $(THERMOSTAT_DIR)/web/war/target/*.war | sed 's/.war$$//g' )" $(THERMOSTAT_WEB_DEPLOY_DIR)

.PHONY: thermostat-build
thermostat-build: | $(THERMOSTAT_DIR)/distribution/target/image	
	
$(THERMOSTAT_DIR)/distribution/target/image: | $(THERMOSTAT_DIR)/pom.xml
	cd $(THERMOSTAT_DIR) &&\
	mvn -Dmaven.test.skip=true clean install
	
$(THERMOSTAT_DIR)/pom.xml: | $(THERMOSTAT_DIR)
	hg clone $(THERMOSTAT_REPO_URL) $(THERMOSTAT_DIR)

$(THERMOSTAT_DIR): | ${BUILD_DIR}
	mkdir -p $(THERMOSTAT_DIR)
	
#### GNOME KEYRING ####

$(GNOME_KEYRING_USER_DATA_DIR):
	# create custom config directory for gnome-keyring and copy data there
	mkdir -p $(GNOME_KEYRING_USER_DATA_DIR)
	cp -r storageconfig/keyrings $(GNOME_KEYRING_USER_DATA_DIR)