Skip to content
Open
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
57 changes: 57 additions & 0 deletions Hometask_6/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>ru.geekbrains</groupId>
<artifactId>gb-unittest</artifactId>
<version>1.0-SNAPSHOT</version>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
</project>
38 changes: 38 additions & 0 deletions Hometask_6/src/main/java/homework_6/Task2.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package homework_6;

import java.util.Arrays;

public class Task2 {

public int[] getNumbersAfterLast4(int[] array){

int[] result;
if (array == null){
throw new NullPointerException();
}
if (array.length == 0){
throw new IllegalArgumentException("The length of array could not be 0 ");
}

int count=-1;
for (int i = 0; i < array.length; i++) {
if (array[i]==4){
count=i;
}
}
if (count==-1){
throw new RuntimeException();
}
if (count==array.length-1){
return null;
} else {
result = new int[array.length-1 - count];
for (int i = count+1; i < array.length; i++) {
result[i-count-1] = array[i];
}
}
System.out.println(Arrays.toString(result));
return result;
}

}
25 changes: 25 additions & 0 deletions Hometask_6/src/main/java/homework_6/Task_3.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package homework_6;

import java.util.Arrays;

public class Task_3 {
public boolean chekElementsOfArray( int[] array){
if (array == null){
throw new NullPointerException();
}
if (array.length == 0){
throw new IllegalArgumentException("The length of array could not be 0 ");
}
long countOfOne = Arrays.stream(array)
.filter(x->x==1)
.count();
long countOfFour = Arrays.stream(array)
.filter(x->x==4)
.count();
if (countOfFour==0 || countOfOne==0){
return false;
}
return countOfFour+countOfOne == array.length;

}
}
10 changes: 10 additions & 0 deletions Hometask_6/src/main/java/homework_6/test.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package homework_6;

public class test {
public static void main(String[] args) {
int [] a = new int[0];
for (int i : a) {
System.out.println(i);
}
}
}
97 changes: 97 additions & 0 deletions Hometask_6/src/main/java/server/ServerChat.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
package server;

import org.apache.log4j.Logger;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;


public class ServerChat implements Chat {
private static final Logger logger = Logger.getLogger(ServerChat.class);
private ServerSocket serverSocket;
private Set<ClientHandler> clients;
private AuthenticationService authenticationService;

public ServerChat() {
start();
}


@Override
public AuthenticationService getAuthenticationService() {
return authenticationService;
}

private void start() {
try {
serverSocket = new ServerSocket(9998);
String startMessage = "Server started";
logger.info(startMessage);
clients = new HashSet<>();
authenticationService = new AuthenticationService();

while (true) {

System.out.println("Server is waiting for a connection ...");
Socket socket = serverSocket.accept();
ClientHandler clientHandler = new ClientHandler(socket, this);
System.out.println(String.format("[%s] Client[%s] is successfully logged in", new Date(), clientHandler.getName()));
}
} catch (Exception e) {
logger.error("An error :" +e.getMessage());
e.printStackTrace();
}
}


@Override
public synchronized void broadcastMessage(String message) {
for (ClientHandler client : clients) {
client.sendMessage(message);
}
logger.info(message);
}

@Override
public synchronized boolean isNicknameOccupied(String nickname) {
for (ClientHandler client : clients) {
if (client.getName().equals(nickname)) {
return true;
}
}
return false;
}

@Override
public synchronized void subscribe(ClientHandler client) {
clients.add(client);
logger.info(client.getName()+ "connected to server");

}

@Override
public synchronized void unsubscribe(ClientHandler client) {
clients.remove(client);
logger.info(client.getName() + "disconnected from server");
}
@Override
public void sendPrivateMessage(String privateMessage, ClientHandler clientHandler, String destName) {
ClientHandler dest = getClientByNickname(destName);
if (Objects.nonNull(dest)){

dest.sendMessage(String.format("[%s private 4u] : %s", clientHandler.getName(), privateMessage));
} else {
clientHandler.sendMessage(String.format("[%s] is offline. Cannot send message", destName));
}
}
private ClientHandler getClientByNickname( String name){
for (ClientHandler s : clients) {
if (s.getName().equals(name)) return s;
}
return null;
}
}
16 changes: 16 additions & 0 deletions Hometask_6/src/main/resources/log4j.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Root logger option
log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
57 changes: 57 additions & 0 deletions Hometask_6/src/test/java/homework_6_test/Task_2_Test.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package homework_6_test;

import homework_6.Task2;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import java.util.stream.Stream;


public class Task_2_Test {
private Task2 t2 = new Task2();

@ParameterizedTest
@MethodSource("arraysProvider1")
void shouldReturnAnArrayOfIntNumbersFollowingTheLastFour(int[] expected, int[] source) {
Assertions.assertArrayEquals(expected, t2.getNumbersAfterLast4(source));
}
@ParameterizedTest
@MethodSource("arraysProvider2")
void shouldReturnNullIfDigit4IsTheLastElementOfSourceArray(int[] expected, int[] source) {
Assertions.assertArrayEquals(expected, t2.getNumbersAfterLast4(source));
}

@Test
void shouldThrowNullPointerExceptionWhenInputIsNull(){
Assertions.assertThrows(NullPointerException.class,()-> t2.getNumbersAfterLast4(null));
}
@Test
void shouldIllegalArgumentExceptionWhenInputArrayContainsNoElements(){
Assertions.assertThrows(IllegalArgumentException.class,()-> t2.getNumbersAfterLast4(new int[0]));
}
@Test
void shouldThrowRuntimeExceptionWhenInputArrayDoesNotContainDigit4(){
Assertions.assertThrows(RuntimeException.class,()-> t2.getNumbersAfterLast4(new int[]{1,2,3,5,6}));
}

private static Stream<Arguments> arraysProvider1() {
return Stream.of(
Arguments.arguments(new int[]{1, 7},new int[]{1,2,4,4,2,3,4,1,7}),
Arguments.arguments(null, new int[]{1,4}),
Arguments.arguments(null, new int[]{4}),
Arguments.arguments(new int[]{1}, new int[]{4,1}),
Arguments.arguments(new int[]{3,3,3,3,3,3,5}, new int[]{4,1,4,3,3,3,3,3,3,5})

);
}
private static Stream<Arguments> arraysProvider2() {
return Stream.of(
Arguments.arguments(null, new int[]{1,4}),
Arguments.arguments(null, new int[]{4}),
Arguments.arguments(null, new int[]{1,2,3,3,3,3,3,3,4})

);
}
}
39 changes: 39 additions & 0 deletions Hometask_6/src/test/java/homework_6_test/Task_3_Test.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package homework_6_test;

import homework_6.Task_3;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import java.util.stream.Stream;

public class Task_3_Test {
Task_3 t3 = new Task_3();

@ParameterizedTest
@MethodSource("resultProvider")
void shouldCheckIfArrayContainsOnlyNumbers1and4(boolean expected, int[] source) {
Assertions.assertEquals(expected, t3.chekElementsOfArray(source));
}

@Test
void shouldThrowNullPointerExceptionWhenInputIsNull() {
Assertions.assertThrows(NullPointerException.class, () -> t3.chekElementsOfArray(null));
}
@Test
void shouldIllegalArgumentExceptionWhenInputArrayContainsNoElements(){
Assertions.assertThrows(IllegalArgumentException.class,()-> t3.chekElementsOfArray(new int[0]));
}

private static Stream<Arguments> resultProvider() {
return Stream.of(
Arguments.arguments(true, new int[]{1, 1, 1, 4, 4, 1, 4, 4}),
Arguments.arguments(false, new int[]{1, 1, 1, 1, 1, 1}),
Arguments.arguments(false, new int[]{4, 4, 4, 4}),
Arguments.arguments(false, new int[]{1, 4, 4, 1, 1, 4, 3})

);
}
}
16 changes: 16 additions & 0 deletions Hometask_6/target/classes/log4j.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Root logger option
log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n