Browse Source
Merge branch 'feature/customer-login' into 'feature/string-handling'
Merge branch 'feature/customer-login' into 'feature/string-handling'
# Conflicts: # src/CustomerProperties.h # tests/build/test/cache/defines_dependency.ymlremotes/origin/feature/string-handling
fdai7057
2 years ago
17 changed files with 422 additions and 1 deletions
-
6src/CustomerData.txt
-
97src/LoginCustomer.c
-
10src/LoginCustomer.h
-
2tests/build/test/cache/defines_dependency.yml
-
87tests/build/test/cache/test_LoginCustomer.c
-
3tests/build/test/dependencies/LoginCustomer.d
-
4tests/build/test/dependencies/test_LoginCustomer.d
-
4tests/build/test/dependencies/test_LoginCustomer_runner.d
-
BINtests/build/test/out/c/LoginCustomer.o
-
BINtests/build/test/out/c/test_LoginCustomer.o
-
BINtests/build/test/out/c/test_LoginCustomer_runner.o
-
BINtests/build/test/out/test_LoginCustomer.out
-
87tests/build/test/preprocess/files/test_LoginCustomer.c
-
3tests/build/test/preprocess/includes/test_LoginCustomer.c
-
18tests/build/test/results/test_LoginCustomer.pass
-
81tests/build/test/runners/test_LoginCustomer_runner.c
-
21tests/test/test_LoginCustomer.c
@ -0,0 +1,6 @@ |
|||||
|
1234=example |
||||
|
ID=1234 |
||||
|
forename=Max |
||||
|
Surname=Mustermann |
||||
|
password=example |
||||
|
balance=0 |
@ -0,0 +1,97 @@ |
|||||
|
#include "LoginCustomer.h" |
||||
|
|
||||
|
bool checkLogin(bool loginSuccessful) |
||||
|
{ |
||||
|
return (loginSuccessful) ? true : false; |
||||
|
} |
||||
|
|
||||
|
void collectCustomerDataForLogin(int attempts) |
||||
|
{ |
||||
|
customer_t c; |
||||
|
c.ID = calloc(15+1,sizeof(char)); |
||||
|
c.password = calloc(15+1, sizeof(char)); |
||||
|
char digitCharacterFromUser, passwordCharacterFromUser; |
||||
|
int IDLengthCounter = 0, passwordLengthCounter = 0; |
||||
|
const int IDMaxLength = 16, passwordMaxLength = 16; |
||||
|
|
||||
|
printf("Enter ID:\n"); |
||||
|
while(((digitCharacterFromUser=getchar()) != '\n')&&IDLengthCounter<IDMaxLength){ |
||||
|
if(digitCharacterFromUser>='0'&&digitCharacterFromUser<='9'){ |
||||
|
*(c.ID+IDLengthCounter) = digitCharacterFromUser; |
||||
|
} |
||||
|
else{ |
||||
|
printf("Character entered is not a digit. Aborting.\n"); |
||||
|
exit(-1); |
||||
|
} |
||||
|
++IDLengthCounter; |
||||
|
} |
||||
|
*(c.ID+IDLengthCounter) = '\0'; |
||||
|
|
||||
|
if(IDLengthCounter>=IDMaxLength){ |
||||
|
printf("ID entered is too long. Aborting.\n"); |
||||
|
exit(-1); |
||||
|
} |
||||
|
|
||||
|
printf("Enter password:\n"); |
||||
|
while((passwordCharacterFromUser=getchar())!='\n'&&passwordLengthCounter<passwordMaxLength){ |
||||
|
*(c.password+passwordLengthCounter) = passwordCharacterFromUser; |
||||
|
++passwordLengthCounter; |
||||
|
} |
||||
|
*(c.password+passwordLengthCounter) = '\0'; |
||||
|
|
||||
|
if(passwordLengthCounter>=passwordMaxLength){ |
||||
|
printf("Password entered is too long. Aborting.\n"); |
||||
|
exit(-1); |
||||
|
} |
||||
|
customer_t *ptr = &c; |
||||
|
bool loginSuccessful = loginCustomer(ptr); |
||||
|
if(loginSuccessful ) { |
||||
|
printf("Welcome to the menu!\n"); |
||||
|
//call menu() |
||||
|
}else if(!loginSuccessful && attempts < MAX_LOGIN_ATTEMPTS){ |
||||
|
printf("You have %d attempts left.\n", MAX_LOGIN_ATTEMPTS - attempts); |
||||
|
collectCustomerDataForLogin(++attempts); |
||||
|
}else{ |
||||
|
printf("Maximum number of attempts reached. Program terminates.\n"); |
||||
|
exit(-1); |
||||
|
//call error() |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
bool loginCustomer(customer_t *c) |
||||
|
{ |
||||
|
bool foundCustomerEntryInFile = false; |
||||
|
char *searchForThisString = generateCheckString(c->ID,c->password); |
||||
|
char *lineFromCustomerFile = calloc(40,sizeof(char)); |
||||
|
FILE *readCustomerFile = fopen("CustomerData.txt", "r"); |
||||
|
if(readCustomerFile==NULL){ |
||||
|
printf("Could not find file. Aborting.\n"); |
||||
|
exit(-1); |
||||
|
//call error() |
||||
|
} |
||||
|
while((fscanf(readCustomerFile,"%s",lineFromCustomerFile)!=EOF)){ |
||||
|
if(strcmp(searchForThisString,lineFromCustomerFile)==0){ |
||||
|
foundCustomerEntryInFile = true; |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if(checkLogin(foundCustomerEntryInFile)){ |
||||
|
printf("Login successful.\n"); |
||||
|
return foundCustomerEntryInFile; |
||||
|
}else{ |
||||
|
printf("Login not successful.\n"); |
||||
|
} |
||||
|
fclose(readCustomerFile); |
||||
|
return foundCustomerEntryInFile; |
||||
|
} |
||||
|
|
||||
|
char *generateCheckString(char *ID, char *password){ |
||||
|
int checkStringLength = strlen(ID) + 1 + strlen(password) + 1; |
||||
|
char *checkString = calloc(checkStringLength, sizeof(char)); |
||||
|
checkString = strcat(ID,"="); |
||||
|
checkString = strcat(checkString,password); |
||||
|
*(checkString+checkStringLength) = '\0'; |
||||
|
return checkString; |
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
#include <stdio.h> |
||||
|
#include <stdlib.h> |
||||
|
#include <stdbool.h> |
||||
|
#include <string.h> |
||||
|
#include "CustomerProperties.h" |
||||
|
#define MAX_LOGIN_ATTEMPTS 3 |
||||
|
char *generateCheckString(char *, char*); |
||||
|
bool checkLogin(bool); |
||||
|
void collectCustomerDataForLogin(int); |
||||
|
bool loginCustomer(customer_t *); |
@ -1,3 +1,3 @@ |
|||||
--- |
--- |
||||
"/home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/StringManipulation.c": |
|
||||
|
"/home/julius/Documents/Studium/Informatik/1. Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.c": |
||||
- TEST |
- TEST |
@ -0,0 +1,87 @@ |
|||||
|
#include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" |
||||
|
#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" |
||||
|
void setUp(){}; |
||||
|
|
||||
|
void tearDown(){}; |
||||
|
|
||||
|
void test_checkLogin() |
||||
|
|
||||
|
{ |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
_Bool |
||||
|
|
||||
|
expected_test_values_compute_to_true[] = {4==4, |
||||
|
|
||||
|
1 |
||||
|
|
||||
|
== |
||||
|
|
||||
|
1 |
||||
|
|
||||
|
, 1==1, |
||||
|
|
||||
|
0 |
||||
|
|
||||
|
== |
||||
|
|
||||
|
0 |
||||
|
|
||||
|
, 'z'=='z', '='=='=',0x1A==0x1A}; |
||||
|
|
||||
|
int length_1 = sizeof(expected_test_values_compute_to_true)/sizeof( |
||||
|
|
||||
|
_Bool |
||||
|
|
||||
|
); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
_Bool |
||||
|
|
||||
|
expected_test_values_compute_to_false[] = {4!=4, |
||||
|
|
||||
|
1 |
||||
|
|
||||
|
== |
||||
|
|
||||
|
0 |
||||
|
|
||||
|
,1==0, |
||||
|
|
||||
|
0 |
||||
|
|
||||
|
== |
||||
|
|
||||
|
1 |
||||
|
|
||||
|
,'z'=='x','!'==')',0x1A==0x2B}; |
||||
|
|
||||
|
int length_2 = sizeof(expected_test_values_compute_to_false)/sizeof( |
||||
|
|
||||
|
_Bool |
||||
|
|
||||
|
); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
for(int i=0;i<7;++i) { |
||||
|
|
||||
|
do {if ((checkLogin(expected_test_values_compute_to_true[i]))) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(16)));}} while(0); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
for(int i=0;i<7;++i){ |
||||
|
|
||||
|
do {if (!(checkLogin(expected_test_values_compute_to_false[i]))) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(19)));}} while(0); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,3 @@ |
|||||
|
build/test/out/c/LoginCustomer.o: \ |
||||
|
/home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.c \ |
||||
|
/home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h |
@ -0,0 +1,4 @@ |
|||||
|
build/test/out/c/test_LoginCustomer.o: test/test_LoginCustomer.c \ |
||||
|
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ |
||||
|
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h \ |
||||
|
/home/julius/Documents/Studium/Informatik/1.\ Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h |
@ -0,0 +1,4 @@ |
|||||
|
build/test/out/c/test_LoginCustomer_runner.o: \ |
||||
|
build/test/runners/test_LoginCustomer_runner.c \ |
||||
|
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h \ |
||||
|
/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity_internals.h |
@ -0,0 +1,87 @@ |
|||||
|
#include "Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h" |
||||
|
#include "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" |
||||
|
void setUp(){}; |
||||
|
|
||||
|
void tearDown(){}; |
||||
|
|
||||
|
void test_checkLogin() |
||||
|
|
||||
|
{ |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
_Bool |
||||
|
|
||||
|
expected_test_values_compute_to_true[] = {4==4, |
||||
|
|
||||
|
1 |
||||
|
|
||||
|
== |
||||
|
|
||||
|
1 |
||||
|
|
||||
|
, 1==1, |
||||
|
|
||||
|
0 |
||||
|
|
||||
|
== |
||||
|
|
||||
|
0 |
||||
|
|
||||
|
, 'z'=='z', '='=='=',0x1A==0x1A}; |
||||
|
|
||||
|
int length_1 = sizeof(expected_test_values_compute_to_true)/sizeof( |
||||
|
|
||||
|
_Bool |
||||
|
|
||||
|
); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
_Bool |
||||
|
|
||||
|
expected_test_values_compute_to_false[] = {4!=4, |
||||
|
|
||||
|
1 |
||||
|
|
||||
|
== |
||||
|
|
||||
|
0 |
||||
|
|
||||
|
,1==0, |
||||
|
|
||||
|
0 |
||||
|
|
||||
|
== |
||||
|
|
||||
|
1 |
||||
|
|
||||
|
,'z'=='x','!'==')',0x1A==0x2B}; |
||||
|
|
||||
|
int length_2 = sizeof(expected_test_values_compute_to_false)/sizeof( |
||||
|
|
||||
|
_Bool |
||||
|
|
||||
|
); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
for(int i=0;i<7;++i) { |
||||
|
|
||||
|
do {if ((checkLogin(expected_test_values_compute_to_true[i]))) {} else {UnityFail( ((" Expected TRUE Was FALSE")), (UNITY_UINT)((UNITY_UINT)(16)));}} while(0); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
for(int i=0;i<7;++i){ |
||||
|
|
||||
|
do {if (!(checkLogin(expected_test_values_compute_to_false[i]))) {} else {UnityFail( ((" Expected FALSE Was TRUE")), (UNITY_UINT)((UNITY_UINT)(19)));}} while(0); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,3 @@ |
|||||
|
--- |
||||
|
- "/var/lib/gems/2.7.0/gems/ceedling-0.31.1/vendor/unity/src/unity.h" |
||||
|
- Semester/ProgMeth/Bankmanagement/bankmanagement-system/src/LoginCustomer.h |
@ -0,0 +1,18 @@ |
|||||
|
--- |
||||
|
:source: |
||||
|
:path: test |
||||
|
:file: test_LoginCustomer.c |
||||
|
:successes: |
||||
|
- :test: test_checkLogin |
||||
|
:line: 5 |
||||
|
:message: '' |
||||
|
:unity_test_time: 0 |
||||
|
:failures: [] |
||||
|
:ignores: [] |
||||
|
:counts: |
||||
|
:total: 1 |
||||
|
:passed: 1 |
||||
|
:failed: 0 |
||||
|
:ignored: 0 |
||||
|
:stdout: [] |
||||
|
:time: 0.001912861000164412 |
@ -0,0 +1,81 @@ |
|||||
|
/* AUTOGENERATED FILE. DO NOT EDIT. */ |
||||
|
|
||||
|
/*=======Automagically Detected Files To Include=====*/ |
||||
|
#include "unity.h" |
||||
|
|
||||
|
int GlobalExpectCount; |
||||
|
int GlobalVerifyOrder; |
||||
|
char* GlobalOrderError; |
||||
|
|
||||
|
/*=======External Functions This Runner Calls=====*/ |
||||
|
extern void setUp(void); |
||||
|
extern void tearDown(void); |
||||
|
extern void test_checkLogin(); |
||||
|
|
||||
|
|
||||
|
/*=======Mock Management=====*/ |
||||
|
static void CMock_Init(void) |
||||
|
{ |
||||
|
GlobalExpectCount = 0; |
||||
|
GlobalVerifyOrder = 0; |
||||
|
GlobalOrderError = NULL; |
||||
|
} |
||||
|
static void CMock_Verify(void) |
||||
|
{ |
||||
|
} |
||||
|
static void CMock_Destroy(void) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
/*=======Test Reset Options=====*/ |
||||
|
void resetTest(void); |
||||
|
void resetTest(void) |
||||
|
{ |
||||
|
tearDown(); |
||||
|
CMock_Verify(); |
||||
|
CMock_Destroy(); |
||||
|
CMock_Init(); |
||||
|
setUp(); |
||||
|
} |
||||
|
void verifyTest(void); |
||||
|
void verifyTest(void) |
||||
|
{ |
||||
|
CMock_Verify(); |
||||
|
} |
||||
|
|
||||
|
/*=======Test Runner Used To Run Each Test=====*/ |
||||
|
static void run_test(UnityTestFunction func, const char* name, UNITY_LINE_TYPE line_num) |
||||
|
{ |
||||
|
Unity.CurrentTestName = name; |
||||
|
Unity.CurrentTestLineNumber = line_num; |
||||
|
#ifdef UNITY_USE_COMMAND_LINE_ARGS |
||||
|
if (!UnityTestMatches()) |
||||
|
return; |
||||
|
#endif |
||||
|
Unity.NumberOfTests++; |
||||
|
UNITY_CLR_DETAILS(); |
||||
|
UNITY_EXEC_TIME_START(); |
||||
|
CMock_Init(); |
||||
|
if (TEST_PROTECT()) |
||||
|
{ |
||||
|
setUp(); |
||||
|
func(); |
||||
|
} |
||||
|
if (TEST_PROTECT()) |
||||
|
{ |
||||
|
tearDown(); |
||||
|
CMock_Verify(); |
||||
|
} |
||||
|
CMock_Destroy(); |
||||
|
UNITY_EXEC_TIME_STOP(); |
||||
|
UnityConcludeTest(); |
||||
|
} |
||||
|
|
||||
|
/*=======MAIN=====*/ |
||||
|
int main(void) |
||||
|
{ |
||||
|
UnityBegin("test_LoginCustomer.c"); |
||||
|
run_test(test_checkLogin, "test_checkLogin", 5); |
||||
|
|
||||
|
return UnityEnd(); |
||||
|
} |
@ -0,0 +1,21 @@ |
|||||
|
#include <unity.h> |
||||
|
#include "LoginCustomer.h" |
||||
|
void setUp(){}; |
||||
|
void tearDown(){}; |
||||
|
void test_checkLogin() |
||||
|
{ |
||||
|
/*arrange*/ |
||||
|
bool expected_test_values_compute_to_true[] = {4==4,true==true, 1==1, false==false, 'z'=='z', '='=='=',0x1A==0x1A}; |
||||
|
int length_1 = sizeof(expected_test_values_compute_to_true)/sizeof(bool); |
||||
|
|
||||
|
bool expected_test_values_compute_to_false[] = {4!=4,true==false,1==0,false==true,'z'=='x','!'==')',0x1A==0x2B}; |
||||
|
int length_2 = sizeof(expected_test_values_compute_to_false)/sizeof(bool); |
||||
|
|
||||
|
/*act and assertions*/ |
||||
|
for(int i=0;i<7;++i) { |
||||
|
TEST_ASSERT_TRUE(checkLogin(expected_test_values_compute_to_true[i])); |
||||
|
} |
||||
|
for(int i=0;i<7;++i){ |
||||
|
TEST_ASSERT_FALSE(checkLogin(expected_test_values_compute_to_false[i])); |
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue