Browse Source

Merge branch 'feature/customer-login' into 'feature/string-handling'

# Conflicts:
#   src/CustomerProperties.h
#   tests/build/test/cache/defines_dependency.yml
remotes/origin/feature/string-handling
fdai7057 2 years ago
parent
commit
104aae81c4
  1. 6
      src/CustomerData.txt
  2. 97
      src/LoginCustomer.c
  3. 10
      src/LoginCustomer.h
  4. 2
      tests/build/test/cache/defines_dependency.yml
  5. 87
      tests/build/test/cache/test_LoginCustomer.c
  6. 3
      tests/build/test/dependencies/LoginCustomer.d
  7. 4
      tests/build/test/dependencies/test_LoginCustomer.d
  8. 4
      tests/build/test/dependencies/test_LoginCustomer_runner.d
  9. BIN
      tests/build/test/out/c/LoginCustomer.o
  10. BIN
      tests/build/test/out/c/test_LoginCustomer.o
  11. BIN
      tests/build/test/out/c/test_LoginCustomer_runner.o
  12. BIN
      tests/build/test/out/test_LoginCustomer.out
  13. 87
      tests/build/test/preprocess/files/test_LoginCustomer.c
  14. 3
      tests/build/test/preprocess/includes/test_LoginCustomer.c
  15. 18
      tests/build/test/results/test_LoginCustomer.pass
  16. 81
      tests/build/test/runners/test_LoginCustomer_runner.c
  17. 21
      tests/test/test_LoginCustomer.c

6
src/CustomerData.txt

@ -0,0 +1,6 @@
1234=example
ID=1234
forename=Max
Surname=Mustermann
password=example
balance=0

97
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<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;
}

10
src/LoginCustomer.h

@ -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 *);

2
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 - TEST

87
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);
}
}

3
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

4
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

4
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

BIN
tests/build/test/out/c/LoginCustomer.o

BIN
tests/build/test/out/c/test_LoginCustomer.o

BIN
tests/build/test/out/c/test_LoginCustomer_runner.o

BIN
tests/build/test/out/test_LoginCustomer.out

87
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);
}
}

3
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

18
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

81
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();
}

21
tests/test/test_LoginCustomer.c

@ -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]));
}
}
Loading…
Cancel
Save