diff --git a/src/CustomerData.txt b/src/CustomerData.txt new file mode 100644 index 0000000..3ac070f --- /dev/null +++ b/src/CustomerData.txt @@ -0,0 +1,6 @@ +1234=example +ID=1234 +forename=Max +Surname=Mustermann +password=example +balance=0 diff --git a/src/LoginCustomer.c b/src/LoginCustomer.c new file mode 100644 index 0000000..5c2a7a4 --- /dev/null +++ b/src/LoginCustomer.c @@ -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='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){ + 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; +} diff --git a/src/LoginCustomer.h b/src/LoginCustomer.h new file mode 100644 index 0000000..809765b --- /dev/null +++ b/src/LoginCustomer.h @@ -0,0 +1,10 @@ +#include +#include +#include +#include +#include "CustomerProperties.h" +#define MAX_LOGIN_ATTEMPTS 3 +char *generateCheckString(char *, char*); +bool checkLogin(bool); +void collectCustomerDataForLogin(int); +bool loginCustomer(customer_t *); diff --git a/tests/build/test/cache/defines_dependency.yml b/tests/build/test/cache/defines_dependency.yml index 551c1ff..9f4fffc 100644 --- a/tests/build/test/cache/defines_dependency.yml +++ b/tests/build/test/cache/defines_dependency.yml @@ -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 diff --git a/tests/build/test/cache/test_LoginCustomer.c b/tests/build/test/cache/test_LoginCustomer.c new file mode 100644 index 0000000..28f8ec8 --- /dev/null +++ b/tests/build/test/cache/test_LoginCustomer.c @@ -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); + + } + +} diff --git a/tests/build/test/dependencies/LoginCustomer.d b/tests/build/test/dependencies/LoginCustomer.d new file mode 100644 index 0000000..45e2415 --- /dev/null +++ b/tests/build/test/dependencies/LoginCustomer.d @@ -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 diff --git a/tests/build/test/dependencies/test_LoginCustomer.d b/tests/build/test/dependencies/test_LoginCustomer.d new file mode 100644 index 0000000..1a634fe --- /dev/null +++ b/tests/build/test/dependencies/test_LoginCustomer.d @@ -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 diff --git a/tests/build/test/dependencies/test_LoginCustomer_runner.d b/tests/build/test/dependencies/test_LoginCustomer_runner.d new file mode 100644 index 0000000..1649170 --- /dev/null +++ b/tests/build/test/dependencies/test_LoginCustomer_runner.d @@ -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 diff --git a/tests/build/test/out/c/LoginCustomer.o b/tests/build/test/out/c/LoginCustomer.o new file mode 100644 index 0000000..82cb77b Binary files /dev/null and b/tests/build/test/out/c/LoginCustomer.o differ diff --git a/tests/build/test/out/c/test_LoginCustomer.o b/tests/build/test/out/c/test_LoginCustomer.o new file mode 100644 index 0000000..6c5aeaa Binary files /dev/null and b/tests/build/test/out/c/test_LoginCustomer.o differ diff --git a/tests/build/test/out/c/test_LoginCustomer_runner.o b/tests/build/test/out/c/test_LoginCustomer_runner.o new file mode 100644 index 0000000..f839ac1 Binary files /dev/null and b/tests/build/test/out/c/test_LoginCustomer_runner.o differ diff --git a/tests/build/test/out/test_LoginCustomer.out b/tests/build/test/out/test_LoginCustomer.out new file mode 100755 index 0000000..3c7dca5 Binary files /dev/null and b/tests/build/test/out/test_LoginCustomer.out differ diff --git a/tests/build/test/preprocess/files/test_LoginCustomer.c b/tests/build/test/preprocess/files/test_LoginCustomer.c new file mode 100644 index 0000000..28f8ec8 --- /dev/null +++ b/tests/build/test/preprocess/files/test_LoginCustomer.c @@ -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); + + } + +} diff --git a/tests/build/test/preprocess/includes/test_LoginCustomer.c b/tests/build/test/preprocess/includes/test_LoginCustomer.c new file mode 100644 index 0000000..8d24aa9 --- /dev/null +++ b/tests/build/test/preprocess/includes/test_LoginCustomer.c @@ -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 diff --git a/tests/build/test/results/test_LoginCustomer.pass b/tests/build/test/results/test_LoginCustomer.pass new file mode 100644 index 0000000..730ed0b --- /dev/null +++ b/tests/build/test/results/test_LoginCustomer.pass @@ -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 diff --git a/tests/build/test/runners/test_LoginCustomer_runner.c b/tests/build/test/runners/test_LoginCustomer_runner.c new file mode 100644 index 0000000..f061ca9 --- /dev/null +++ b/tests/build/test/runners/test_LoginCustomer_runner.c @@ -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(); +} diff --git a/tests/test/test_LoginCustomer.c b/tests/test/test_LoginCustomer.c new file mode 100644 index 0000000..610a847 --- /dev/null +++ b/tests/test/test_LoginCustomer.c @@ -0,0 +1,21 @@ +#include +#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])); + } +}