Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

implement) socket #18

Merged
merged 9 commits into from
Sep 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .github/workflows/gtest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: UNIT_TEST
on: [push]
jobs:
Linux:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: build
run: |
cmake -S . -B build
cmake --build build

- name: run all tests on Linux
run: ./build/unit_test

- uses: sarisia/actions-status-discord@v1
if: always()
with:
title: "UNIT_TEST_ON_LINUX"
webhook: ${{ secrets.DISCORD_WEBHOOK }}
status: ${{ job.status }}

macOS:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3

- name: build
run: |
cmake -S . -B build
cmake --build build

- name: run all tests on macOS
run: ./build/unit_test

- uses: sarisia/actions-status-discord@v1
if: always()
with:
title: "UNIT_TEST_ON_MACOS"
webhook: ${{ secrets.DISCORD_WEBHOOK }}
status: ${{ job.status }}
2 changes: 1 addition & 1 deletion .github/workflows/unit_test.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: UNIT_TEST
name: UNIT_TEST_SH
on: [push]
jobs:
run-unit-test:
Expand Down
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@
!config

!srcs
!srcs/**
!srcs/Socket
!www
!includes
!test
!playground

!*.cpp
!*.hpp
Expand All @@ -22,8 +23,9 @@
!Makefile
!CPPLINT.cfg
!webserv.drawio
!CMakeLists.txt

.idea
.vscode
.DS_Store
CMakeLists.txt
CMakeCache.txt
58 changes: 58 additions & 0 deletions CMakeLists.txt
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

このファイルはどういう背景で存在しているのかお聞きしたいです!

Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
cmake_minimum_required(VERSION 3.23)
project(webserv)

set(CMAKE_CXX_STANDARD 98)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "-std=c++98 -Wall -Wextra -Werror -pedantic")

# google test ------------------------------------------------------------------
include(FetchContent)
include(GoogleTest)

FetchContent_Declare(
googletest
DOWNLOAD_EXTRACT_TIMESTAMP true
URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
enable_testing()


# when you .cpp or .hpp is added, add the following
# include, webserv srcs, unit_test_srcs
# includes ---------------------------------------------------------------------
include_directories(
includes
srcs/Socket
)

# webserv_srcs -----------------------------------------------------------------
set(webserv_srcs
srcs/get_valid_config_file_path.cpp
srcs/Socket/Socket.cpp
)

add_executable(webserv
srcs/main.cpp
${webserv_srcs}
)

# unit_test_srcs ---------------------------------------------------------------
set (unit_test_srcs
test/unit_test/is_valid_file_path/test_get_valid_config_file_path.cpp
test/unit_test/TestSocket.cpp
)

add_executable(unit_test
${webserv_srcs}
${unit_test_srcs}
)

# test -------------------------------------------------------------------------
target_link_libraries(
unit_test
GTest::gtest_main
)

gtest_discover_tests(unit_test)
25 changes: 18 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ SRCS_DIR = srcs
SRCS = main.cpp \
get_valid_config_file_path.cpp

#socket
SOCKET_DIR = Socket
SRCS += $(SOCKET_DIR)/Socket.cpp


# OBJS -------------------------------------------------------------------------
OBJS_DIR = objs
Expand All @@ -22,21 +26,20 @@ DEPS = $(OBJS:%.o=%.d)


# INCLUDES ---------------------------------------------------------------------
INCLUDES_DIR = includes srcs/includes
INCLUDES_DIR = includes \
$(SRCS_DIR)/$(SOCKET_DIR)
INCLUDES = $(addprefix -I, $(INCLUDES_DIR))


# RULES ------------------------------------------------------------------------
.PHONY : all
all : $(OBJS_DIR) $(NAME)
all : $(NAME)

$(NAME) : $(OBJS)
$(CXX) $(CXXFLAGS) -o $@ $^

$(OBJS_DIR) :
@mkdir -p $@

$(OBJS_DIR)/%.o : $(SRCS_DIR)/%.cpp
@mkdir -p $$(dirname $@)
$(CXX) $(CXXFLAGS) $(INCLUDES) -c -o $@ $<

.PHONY : clean
Expand All @@ -54,9 +57,17 @@ re : fclean all
lint :
cpplint --recursive srcs

#.PHONY : unit
#unit :
# ./test/unit_test/run_unit_test.sh

.PHONY : unit
unit :
./test/unit_test/run_unit_test.sh

#rm -rf build
cmake -S . -B build
cmake --build build
#./build/unit_test 2>/dev/null
./build/unit_test
#cd build && ctest

-include $(DEPS)
9 changes: 6 additions & 3 deletions includes/webserv.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once

# define EXECUTABLE_FILE_ONLY_ARGC 1
#include <string>

# define CONFIG_FILE_GIVEN_ARGC 2
# define CONFIG_FILE_INDEX 1

Expand All @@ -10,10 +11,12 @@
# define PATH_DELIM '/'
# define EXTENSION_DELIM '.'

# define STAT_ERROR (-1)
# define STAT_ERROR (-1)
# define ERROR (-1)
# define OK 0

# define INVALID_ARGUMENT_ERROR_MSG "[Error] invalid argument"
# define INVALID_PATH_ERROR_MSG "[Error] invalid file path"

std::string get_valid_config_file_path(int argc, char **argv);
std::string get_valid_config_file_path(const char *path);
bool is_valid_config_file_path(const char *path); // todo: static
5 changes: 5 additions & 0 deletions playground/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*

!.gitignore
!*.cpp
!*.hpp
69 changes: 69 additions & 0 deletions playground/playground_socket.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#include <fcntl.h>
#include <netdb.h>
#include <sys/socket.h>
#include <stdio.h>
#include <unistd.h>
#include <cerrno>
#include <cstring>
#include <string>
#include <iostream>

int test_socket(const char *server_ip, const char *server_port) {
int errcode;
int socket_fd;
int ai_family, ai_socktype, ai_protocol;
struct addrinfo *addr_info;
struct addrinfo hints = {};
// const char *server_ip = "127.0.0.1";
// const char *server_port = "65536";

printf("ip:%s, port:%s\n", server_ip, server_port);

hints.ai_socktype = SOCK_STREAM;
hints.ai_family = AF_UNSPEC; // allows IPv4 and IPv6
hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST | AI_NUMERICSERV; // socket, IP, PORT
hints.ai_protocol = IPPROTO_TCP;

errcode = getaddrinfo(server_ip, server_port, &hints, &addr_info);
if (errcode != 0) {
std::cerr << "[Error] getaddrinfo:" << gai_strerror(errcode) << std::endl;
return 1;
}
// std::cout << "errcode:" << errcode << ", " <<

ai_family = addr_info->ai_family;
ai_socktype = addr_info->ai_socktype;
ai_protocol = addr_info->ai_protocol;
errno = 0;
std::cout << "socket" << std::endl;
socket_fd = socket(ai_family, ai_socktype, ai_protocol);
if (socket_fd == -1) {
std::cerr << "[Error] socket:" << strerror(errno) << std::endl;
return 1;
}

std::cout << "bind" << std::endl;
errno = 0;
if (bind(socket_fd, addr_info->ai_addr, addr_info->ai_addrlen) == -1) {
std::cerr << "[Error] bind:" << strerror(errno) << std::endl;
return 1;
}

std::cout << "listen" << std::endl;
if (listen(socket_fd, SOMAXCONN) == -1) {
std::cerr << "[Error] listen:" << strerror(errno) << std::endl;
return 1;
}

std::cout << "OK" << std::endl;
return 0;
}

// port 0, 0はエラーにならない
int main() {
int ret1 = test_socket("255.255.255.254", "8080");
int ret2 = test_socket("255.255.255.254", "8080");

std::cout << "ret1:" << ret1 << std::endl;
std::cout << "ret2:" << ret2 << std::endl;
}
Loading