<commit_before>#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import httplib
import urllib
import json
import test_utils


# Script para hacer pruebas a la API de Oauth de PicBit (api/oauth/{social_network})
# Uso: api_oauth_tester {social_network} [borrado]
# Ejemplo: python api_oauth_tester googleplus

# NOTA: El flujo por github se debe probar a traves del componente de login de github
#       (http://github-login-lab.appspot.com/app/demo.html)

def main():
	network_list = ["facebook", "stackoverflow", "instagram", "linkedin", "googleplus"]

	if len(sys.argv) >= 2:
		social_network = sys.argv[1]
	else:
		social_network = ''
	option = None
	basePath = "/api/oauth/" + social_network

	if len(sys.argv) == 3:
		option = sys.argv[2]

	if social_network in network_list:
		# Conexion con el servidor
		test_utils.openConnection(False) # Pruebas en local(remote=False)

		if social_network == "googleplus" or social_network=="facebook":
			session1 = None
			session2 = None
			old_session = None
			token_id1 = "id" + social_network
			token_id2 = "id" + social_network + "2"
			user_id1 = "user" + social_network + "1"
			user_id2 = "user" + social_network + "2"
			access_token2 = social_network + "2TEST"
			# Si no se especifica una opción, se realizan las pruebas relativas al sign-up, login,
			# obtención de credenciales y logout
			if option == None:
				# TESTs relativos a los casos de sign-up en el sistema
				# TEST 1: Sign up de usuario 1 en el sistema
				request_uri = basePath + "/signup"
				print "TEST 1: Sign up de usuario 1 en el sistema"
				print "Status esperado: 201"
				access_token = social_network + "TEST1"
				params = urllib.urlencode({'token_id': token_id1, 'access_token': access_token,
					'user_identifier': user_id1})
				session1 = test_utils.make_request("POST", request_uri, params, 201, None, True)

				# TEST 2
				request_uri = basePath + "/signup"
				print "TEST 2: Sign up repetido de usuario1 (error 400)"
				print "Status esperado: 400"
				access_token = social_network + "<PASSWORD>1"
				params = urllib.urlencode({'token_id': token_id1, 'access_token': access_token,
					'user_identifier': user_id1})
				test_utils.make_request("POST", request_uri, params, 400, None)

				# TEST 3
				request_uri = basePath + "/signup"
				access_token = social_network + "<PASSWORD>2"
				print "TEST 3: Sign up de usuario proporcionando un token_id ya registrado en el sistema"
				print "Status esperado: 400"
				params = urllib.urlencode({'token_id': token_id1, 'access_token': access_token,
					'user_identifier': user_id1})
				test_utils.make_request("POST", request_uri, params, 400, None)

				# TEST 4
				print "TEST 4: Sign up de usuario 2 con un identificador de usuario ya en uso en el sistema"
				print "Status esperado: 400"
				params = urllib.urlencode({'token_id': token_id2, 'access_token': access_token,
					'user_identifier': user_id1})
				test_utils.make_request("POST", request_uri, params, 400, None)

				# TEST 5
				print "TEST 5: Sign up de usuario 2 en el sistema (caso correcto)"
				print "Status esperado: 201"
				params = urllib.urlencode({'token_id': token_id2, 'access_token': access_token,
					'user_identifier': user_id2})
				session2 = test_utils.make_request("POST", request_uri, params, 201, None, True)

				# TEST 6
				request_uri = basePath + "/credenciales/" + token_id1
				print "TEST 6:  obtenemos credenciales de usuario 1, para comprobar que podemos acceder a recursos de usuario"
				print "Status esperado: 200"
				params = urllib.urlencode({})
				test_utils.make_request("GET", request_uri, params, 200, session1)

				# TEST 7
				request_uri = basePath + "/logout"
				print "TEST 7: Logout de usuario 1 en el sistema"
				print "Status esperado: 200"
				test_utils.make_request("POST", request_uri, params, 200, session1)

				# TEST 8
				print "TEST 8: Logout de usuario 2 en el sistema"
				print "Status esperado: 200"
				test_utils.make_request("POST", request_uri, params, 200, session2)

				#Tests relativos a los casos de Login
				session1 = None
				session2 = None
				# TEST 9
				request_uri = basePath + "/login"
				print "TEST 9: Login de sesión correcto (usuario 1)"
				print "Status esperado: 200"
				access_token = social_network + "TEST"
				params = urllib.urlencode({'token_id': token_id1, 'access_token': access_token})
				session1 = test_utils.make_request("POST", request_uri, params, 200, None, True)

				# TEST 10
				print "TEST 10: Login de sesion iniciada anteriormente (usuario1)"
				print "Con esta prueba pretendemos ver si la cookie que devuelve en un login repetido es la misma que en el login inicial"
				print "Status esperado: 200"
				access_token = social_network + "ModifyTEST"
				params = urllib.urlencode({'token_id': token_id1, 'access_token': access_token})
				old_session = session1
				session1 = test_utils.make_request("POST", request_uri, params, 200, None, True)

				# TEST 11
				request_uri = basePath + "/credenciales/" + token_id1
				print "TEST 11: Obtenemos credenciales con una sesion invalidada"
				print "Status esperado: 400 (la cookie proporcionada no es correcta)"
				params = urllib.urlencode({})
				test_utils.make_request("GET", request_uri, params, 400, old_session)

				# Tests relativos al método GET de credenciales
				# Obtener credenciales sin cookie
				# TEST 12
				request_uri = basePath + "/credenciales/" + token_id1
				print "TEST 12: Obtener credenciales sin cookie de sesion"
				print "Status esperado: 200 (Retorna únicamente el id de usuario propietario de las credenciales)"
				params = urllib.urlencode({})
				test_utils.make_request("GET", request_uri, params, 200, None)

				# TEST 13
				# Obtener credenciales con cookie
				request_uri = basePath + "/credenciales/" + token_id2
				print "TEST 13: Obtener credenciales con cookie de sesion, a una credencial que no es propiedad del usuario"
				print "Status esperado: 200 (Solo retorna el id de usuario propietario del token)"
				params = urllib.urlencode({})
				test_utils.make_request("GET", request_uri, params, 200, session1)

				# Obtener credenciales con cookie
				# TEST 14
				request_uri = basePath + "/credenciales/" + token_id1
				print "TEST 14: Obtener credenciales con cookie de sesion, a una credencial propiedad del usuario"
				print "Status esperado: 200"
				params = urllib.urlencode({})
				test_utils.make_request("GET", request_uri, params, 200, session1)

				#Logouts
				# TEST 15
				request_uri = basePath + "/logout"
				print "TEST 15: Logout sin cookie de sesion"
				print "Status esperado: 401"
				params = urllib.urlencode({})
				test_utils.make_request("POST", request_uri, params, 401, None)

				# TEST 16
				# Se desloguea el usuario logueado (usuario1)
				print "TEST 16: Logout con cookie de sesion (usuario1)"
				print "Status esperado: 200"
				test_utils.make_request("POST", request_uri, params, 200, session1)

				# TEST 17
				# Login (prueba de nueva sesión y actualizar credenciales)
				request_uri = basePath + "/login"
				print "TEST 17: Prueba de nueva sesión y actualizar credenciales (usuario 1)"
				print "Status esperado: 200"
				access_token = social_network + "Modify2TEST"
				params = urllib.urlencode({'token_id': token_id1, 'access_token': access_token})
				test_utils.make_request("POST", request_uri, params, 200, None)

				# TEST 18
				# Obtener credenciales con cookie antigua
				request_uri = basePath + "/credenciales/" + token_id1
				print "TEST 18: Obtener credenciales con cookie de sesión antigua"
				print "Status esperado: 400"
				params = urllib.urlencode({})
				test_utils.make_request("GET", request_uri, params, 400, session1)

				# TEST 19
				# Logout con cookie antigua
				request_uri = basePath + "/logout"
				print "TEST 19: Logout sin cookie de sesion"
				print "Status esperado: 401"
				params = urllib.urlencode({})
				test_utils.make_request("POST", request_uri, params, 401, None)

				# TEST 20
				# Logout con cookie antigua / incorrecta
				request_uri = basePath + "/logout"
				print "TEST 20: Logout con cookie de sesión antigua"
				print "Status esperado: 400"
				params = urllib.urlencode({})
				test_utils.make_request("POST", request_uri, params, 400, session1)

				print "TESTs finalizados. Comprobar las entidades de tipo Usuario y Token almacenadas en datastore"
				print "NOTA: para obtener los resultados esperados en estas pruebas, es necesario ejecutar el script con la BBDD vacía",
				print "(o en su defecto, sin los usuarios 1 y 2)"

			elif option == "borrado":
				# PRE-TEST 1: Login en el sistema de usuario de prueba 1
				access_token = social_network + "tokenTODELETE1"
				session1 = test_utils.do_login_or_signup("googleplus", token_id1, access_token, user_id1)

				# PRE-TEST 2: Login en el sistema de usuario de prueba 2
				access_token = social_network + "tokenTODELETE2"
				session2 = test_utils.do_login_or_signup("googleplus", token_id2, access_token, user_id2)

				# TEST 21<commit_msg>Corrección de errores en la definición de pruebas<commit_after>#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import httplib
import urllib
import json
import test_utils


# Script para hacer pruebas a la API de Oauth de PicBit (api/oauth/{social_network})
# Uso: api_oauth_tester {social_network} [borrado]
# Ejemplo: python api_oauth_tester googleplus

# NOTA: El flujo por github se debe probar a traves del componente de login de github
#       (http://github-login-lab.appspot.com/app/demo.html)

def main():
	network_list = ["facebook", "stackoverflow", "instagram", "linkedin", "googleplus"]

	if len(sys.argv) >= 2:
		social_network = sys.argv[1]
	else:
		social_network = ''
	option = None
	basePath = "/api/oauth/" + social_network

	if len(sys.argv) == 3:
		option = sys.argv[2]

	if social_network in network_list:
		# Conexion con el servidor
		test_utils.openConnection(False) # Pruebas en local(remote=False)

		if social_network == "googleplus" or social_network=="facebook":
			session1 = None
			session2 = None
			old_session = None
			token_id1 = "id" + social_network
			token_id2 = "id" + social_network + "2"
			user_id1 = "user" + social_network + "1"
			user_id2 = "user" + social_network + "2"
			access_token2 = social_network + "2TEST"
			# Si no se especifica una opción, se realizan las pruebas relativas al sign-up, login,
			# obtención de credenciales y logout
			if option == None:
				# TESTs relativos a los casos de sign-up en el sistema
				# TEST 1: Sign up de usuario 1 en el sistema
				request_uri = basePath + "/signup"
				print "TEST 1: Sign up de usuario 1 en el sistema"
				print "Status esperado: 201"
				access_token = social_network + "TEST1"
				params = urllib.urlencode({'token_id': token_id1, 'access_token': access_token,
					'user_identifier': user_id1})
				session1 = test_utils.make_request("POST", request_uri, params, 201, None, True)

				# TEST 2
				request_uri = basePath + "/signup"
				print "TEST 2: Sign up repetido de usuario1 (error 400)"
				print "Status esperado: 400"
				access_token = social_network + "<PASSWORD>"
				params = urllib.urlencode({'token_id': token_id1, 'access_token': access_token,
					'user_identifier': user_id1})
				test_utils.make_request("POST", request_uri, params, 400, None)

				# TEST 4
				print "TEST 4: Sign up de usuario 2 con un identificador de usuario ya en uso en el sistema"
				print "Status esperado: 400"
				params = urllib.urlencode({'token_id': token_id2, 'access_token': access_token,
					'user_identifier': user_id1})
				test_utils.make_request("POST", request_uri, params, 400, None)

				# TEST 5
				print "TEST 5: Sign up de usuario 2 en el sistema (caso correcto)"
				print "Status esperado: 201"
				params = urllib.urlencode({'token_id': token_id2, 'access_token': access_token,
					'user_identifier': user_id2})
				session2 = test_utils.make_request("POST", request_uri, params, 201, None, True)

				# TEST 6
				request_uri = basePath + "/credenciales/" + token_id1
				print "TEST 6:  obtenemos credenciales de usuario 1, para comprobar que podemos acceder a recursos de usuario"
				print "Status esperado: 200"
				params = urllib.urlencode({})
				test_utils.make_request("GET", request_uri, params, 200, session1)

				# TEST 7
				request_uri = basePath + "/logout"
				print "TEST 7: Logout de usuario 1 en el sistema"
				print "Status esperado: 200"
				test_utils.make_request("POST", request_uri, params, 200, session1)

				# TEST 8
				print "TEST 8: Logout de usuario 2 en el sistema"
				print "Status esperado: 200"
				test_utils.make_request("POST", request_uri, params, 200, session2)

				#Tests relativos a los casos de Login
				session1 = None
				session2 = None
				# TEST 9
				request_uri = basePath + "/login"
				print "TEST 9: Login de sesión correcto (usuario 1)"
				print "Status esperado: 200"
				access_token = social_network + "<PASSWORD>"
				params = urllib.urlencode({'token_id': token_id1, 'access_token': access_token})
				session1 = test_utils.make_request("POST", request_uri, params, 200, None, True)

				# TEST 10
				print "TEST 10: Login de sesion iniciada anteriormente (usuario1)"
				print "Con esta prueba pretendemos ver si la cookie que devuelve en un login repetido es la misma que en el login inicial"
				print "Status esperado: 200"
				access_token = social_network + "<PASSWORD>"
				params = urllib.urlencode({'token_id': token_id1, 'access_token': access_token})
				old_session = session1
				session1 = test_utils.make_request("POST", request_uri, params, 200, None, True)

				# TEST 11
				request_uri = basePath + "/credenciales/" + token_id1
				print "TEST 11: Obtenemos credenciales con una sesion invalidada"
				print "Status esperado: 400 (la cookie proporcionada no es correcta)"
				params = urllib.urlencode({})
				test_utils.make_request("GET", request_uri, params, 400, old_session)

				# Tests relativos al método GET de credenciales
				# Obtener credenciales sin cookie
				# TEST 12
				request_uri = basePath + "/credenciales/" + token_id1
				print "TEST 12: Obtener credenciales sin cookie de sesion"
				print "Status esperado: 200 (Retorna únicamente el id de usuario propietario de las credenciales)"
				params = urllib.urlencode({})
				test_utils.make_request("GET", request_uri, params, 200, None)

				# TEST 13
				# Obtener credenciales con cookie
				request_uri = basePath + "/credenciales/" + token_id2
				print "TEST 13: Obtener credenciales con cookie de sesion, a una credencial que no es propiedad del usuario"
				print "Status esperado: 200 (Solo retorna el id de usuario propietario del token)"
				params = urllib.urlencode({})
				test_utils.make_request("GET", request_uri, params, 200, session1)

				# Obtener credenciales con cookie
				# TEST 14
				request_uri = basePath + "/credenciales/" + token_id1
				print "TEST 14: Obtener credenciales con cookie de sesion, a una credencial propiedad del usuario"
				print "Status esperado: 200"
				params = urllib.urlencode({})
				test_utils.make_request("GET", request_uri, params, 200, session1)

				#Tests relativos a Logouts
				# TEST 15
				request_uri = basePath + "/logout"
				print "TEST 15: Logout sin cookie de sesion"
				print "Status esperado: 401"
				params = urllib.urlencode({})
				test_utils.make_request("POST", request_uri, params, 401, None)

				# TEST 16
				# Logout con cookie antigua / incorrecta
				request_uri = basePath + "/logout"
				print "TEST 16: Logout con cookie de sesión antigua"
				print "Status esperado: 400"
				params = urllib.urlencode({})
				test_utils.make_request("POST", request_uri, params, 400, old_session)

				# TEST 17
				# Se desloguea el usuario logueado (usuario1)
				print "TEST 17: Logout con cookie de sesion (usuario1)"
				print "Status esperado: 200"
				test_utils.make_request("POST", request_uri, params, 200, session1)

				# Hacemos un flujo de login, obtención credenciales y logout para verificar que se realiza correctamente
				# TEST 18
				# Login (prueba de nueva sesión y actualizar credenciales)
				request_uri = basePath + "/login"
				print "TEST 18: Prueba de nueva sesión y actualizar credenciales (usuario 1)"
				print "Status esperado: 200"
				access_token = social_network + "<PASSWORD>"
				params = urllib.urlencode({'token_id': token_id1, 'access_token': access_token})
				session1 = test_utils.make_request("POST", request_uri, params, 200, None)

				# TEST 19
				# Obtener credenciales con cookie antigua
				request_uri = basePath + "/credenciales/" + token_id1
				print "TEST 19: Obtener credenciales con cookie de sesión antigua"
				print "Status esperado: 400"
				params = urllib.urlencode({})
				test_utils.make_request("GET", request_uri, params, 400, old_session)

				# TEST 20
				# Logout sin cookie
				request_uri = basePath + "/logout"
				print "TEST 20: Logout sin cookie de sesion"
				print "Status esperado: 401"
				params = urllib.urlencode({})
				test_utils.make_request("POST", request_uri, params, 401, None)

				# TEST 21
				# Se desloguea el usuario logueado (usuario1)
				print "TEST 21: Logout con cookie de sesion (usuario1)"
				print "Status esperado: 200"
				test_utils.make_request("POST", request_uri, params, 200, session1)
				
				print "TESTs finalizados. Comprobar las entidades de tipo Usuario y Token almacenadas en datastore"
				print "NOTA: para obtener los resultados esperados en estas pruebas, es necesario ejecutar el script con la BBDD vacía",
				print "(o en su defecto, sin los usuarios 1 y 2)"

			elif option == "borrado":
				# PRE-TEST 1: Login en el sistema de usuario de prueba 1
				access_token = social_network + "tokenTODELETE1"
				session1 = test_utils.do_login_or_signup("googleplus", token_id1, access_token, user_id1)

				# PRE-TEST 2: Login en el sistema de usuario de prueba 2
				access_token = social_network + "tokenTODELETE2"
				session2 = test_utils.do_login_or_signup("googleplus", token_id2, access_token, user_id2)

				# TEST 21
{'fraction_non_alphanumeric': 0.09607615252642647, 'fraction_numerical': 0.029608722120759313, 'mean_word_length': 3.7829539438856536, 'pattern_counts': {'":': 4, '<': 9, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1349892', 'n_tokens_mistral': 7276, 'n_tokens_neox': 5904, 'n_words': 1905}