Skip to content

Commit aefdc55

Browse files
authored
Add files via upload
1 parent 27a7a19 commit aefdc55

File tree

9 files changed

+399
-0
lines changed

9 files changed

+399
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>org.springframework.boot</groupId>
7+
<artifactId>spring-boot-starter-parent</artifactId>
8+
<version>3.3.4</version>
9+
<relativePath/>
10+
</parent>
11+
<groupId>com.splunk</groupId>
12+
<artifactId>log4j</artifactId>
13+
<version>0.0.1-SNAPSHOT</version>
14+
<name>log4j</name>
15+
<description>Demo project for Splunk with Spring Boot</description>
16+
<properties>
17+
<java.version>17</java.version>
18+
<splunk-logging.version>1.8.0</splunk-logging.version>
19+
</properties>
20+
21+
<repositories>
22+
<repository>
23+
<id>splunk-artifactory</id>
24+
<name>Splunk Releases</name>
25+
<url>https://splunk.jfrog.io/splunk/ext-releases-local</url>
26+
</repository>
27+
<repository>
28+
<id>central</id>
29+
<name>Central Repository</name>
30+
<url>https://repo1.maven.org/maven2/</url>
31+
</repository>
32+
</repositories>
33+
34+
<dependencies>
35+
<dependency>
36+
<groupId>org.springframework.boot</groupId>
37+
<artifactId>spring-boot-starter-web</artifactId>
38+
<exclusions>
39+
<exclusion>
40+
<groupId>org.springframework.boot</groupId>
41+
<artifactId>spring-boot-starter-logging</artifactId>
42+
</exclusion>
43+
</exclusions>
44+
</dependency>
45+
<dependency>
46+
<groupId>org.springframework.boot</groupId>
47+
<artifactId>spring-boot-starter-test</artifactId>
48+
<scope>test</scope>
49+
<exclusions>
50+
<exclusion>
51+
<groupId>org.springframework.boot</groupId>
52+
<artifactId>spring-boot-starter-logging</artifactId>
53+
</exclusion>
54+
</exclusions>
55+
</dependency>
56+
<dependency>
57+
<groupId>com.splunk.logging</groupId>
58+
<artifactId>splunk-library-javalogging</artifactId>
59+
<version>${splunk-logging.version}</version>
60+
</dependency>
61+
<dependency>
62+
<groupId>org.springframework.boot</groupId>
63+
<artifactId>spring-boot-starter-log4j2</artifactId>
64+
</dependency>
65+
</dependencies>
66+
67+
<build>
68+
<plugins>
69+
<plugin>
70+
<groupId>org.springframework.boot</groupId>
71+
<artifactId>spring-boot-maven-plugin</artifactId>
72+
</plugin>
73+
</plugins>
74+
</build>
75+
76+
</project>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.splunk.log4j;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
6+
@SpringBootApplication
7+
public class Log4jApplication {
8+
9+
public static void main(String[] args) {
10+
SpringApplication.run(Log4jApplication.class, args);
11+
}
12+
13+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.splunk.log4j.controller;
2+
3+
import java.util.List;
4+
import org.springframework.web.bind.annotation.GetMapping;
5+
import org.springframework.web.bind.annotation.PathVariable;
6+
import org.springframework.web.bind.annotation.PostMapping;
7+
import org.springframework.web.bind.annotation.RequestBody;
8+
import org.springframework.web.bind.annotation.RequestMapping;
9+
import org.springframework.web.bind.annotation.RestController;
10+
import com.splunk.log4j.dto.Student;
11+
import com.splunk.log4j.service.StudentService;
12+
13+
@RestController
14+
@RequestMapping("students")
15+
public class StudentController {
16+
17+
private final StudentService studentService;
18+
19+
public StudentController(StudentService studentService) {
20+
this.studentService = studentService;
21+
}
22+
23+
@PostMapping
24+
public Student addStudent(@RequestBody Student student) {
25+
return studentService.addStudent(student);
26+
}
27+
28+
@GetMapping
29+
public List<Student> getStudents() {
30+
return studentService.getStudents();
31+
}
32+
33+
@GetMapping("{rollNumber}")
34+
public Student getStudent(@PathVariable("rollNumber") int rollNumber) {
35+
return studentService.getStudent(rollNumber);
36+
}
37+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.splunk.log4j.dto;
2+
3+
import java.util.Objects;
4+
5+
public class Student {
6+
7+
private String name;
8+
9+
private int rollNumber;
10+
11+
public Student() {
12+
}
13+
14+
public String getName() {
15+
return name;
16+
}
17+
18+
public void setName(String name) {
19+
this.name = name;
20+
}
21+
22+
public int getRollNumber() {
23+
return rollNumber;
24+
}
25+
26+
public void setRollNumber(int rollNumber) {
27+
this.rollNumber = rollNumber;
28+
}
29+
30+
@Override
31+
public String toString() {
32+
return "Student{" + "name='" + name + '\'' + ", rollNumber=" + rollNumber + '}';
33+
}
34+
35+
@Override
36+
public boolean equals(Object o) {
37+
if (this == o) {
38+
return true;
39+
}
40+
if (o == null || getClass() != o.getClass()) {
41+
return false;
42+
}
43+
44+
Student student = (Student) o;
45+
46+
if (rollNumber != student.rollNumber) {
47+
return false;
48+
}
49+
return Objects.equals(name, student.name);
50+
}
51+
52+
@Override
53+
public int hashCode() {
54+
int result = name != null ? name.hashCode() : 0;
55+
result = 31 * result + rollNumber;
56+
return result;
57+
}
58+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.splunk.log4j.service;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import org.apache.logging.log4j.LogManager;
6+
import org.apache.logging.log4j.Logger;
7+
import org.springframework.stereotype.Service;
8+
import com.splunk.log4j.dto.Student;
9+
10+
@Service
11+
public class StudentService {
12+
13+
private static final Logger logger = LogManager.getLogger(StudentService.class);
14+
15+
private final List<Student> students = new ArrayList<>();
16+
17+
public Student addStudent(Student student) {
18+
logger.info("addStudent: adding Student");
19+
logger.info("addStudent: Request: {}", student);
20+
students.add(student);
21+
logger.info("addStudent: added Student");
22+
logger.info("addStudent: Response: {}", student);
23+
return student;
24+
}
25+
26+
public List<Student> getStudents() {
27+
logger.info("getStudents: getting Students");
28+
List<Student> studentsList = students;
29+
logger.info("getStudents: got Students");
30+
logger.info("getStudents: Response: {}", studentsList);
31+
return studentsList;
32+
}
33+
34+
public Student getStudent(int rollNumber) {
35+
logger.info("getStudent: getting Student");
36+
logger.info("getStudent: Request: {}", rollNumber);
37+
Student student = students.stream()
38+
.filter(stu -> stu.getRollNumber() == rollNumber)
39+
.findAny()
40+
.orElseThrow(() -> new RuntimeException("Student not found"));
41+
logger.info("getStudent: got Student");
42+
logger.info("getStudent: Response: {}", student);
43+
return student;
44+
}
45+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
spring.application.name=log4j
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Configuration>
3+
<Appenders>
4+
<Console name="console" target="SYSTEM_OUT">
5+
<PatternLayout
6+
pattern="%style{%d{ISO8601}} %highlight{%-5level }[%style{%t}{bright,blue}] %style{%C{10}}{bright,yellow}: %msg%n%throwable"/>
7+
</Console>
8+
<SplunkHttp
9+
name="splunkhttp"
10+
url="http://localhost:8088"
11+
token="11806291-7e0e-422a-a083-abfdd4b2eb74"
12+
host="localhost"
13+
index="student_api_dev"
14+
type="raw"
15+
source="student-http-events"
16+
sourcetype="log4j"
17+
messageFormat="text"
18+
disableCertificateValidation="true">
19+
<PatternLayout pattern="%m"/>
20+
</SplunkHttp>
21+
</Appenders>
22+
23+
<Loggers>
24+
<Root level="info">
25+
<AppenderRef ref="console"/>
26+
<AppenderRef ref="splunkhttp"/>
27+
</Root>
28+
</Loggers>
29+
</Configuration>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.splunk.log4j.controller;
2+
3+
import static org.mockito.Mockito.when;
4+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
5+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
6+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
7+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
8+
import java.util.List;
9+
import org.junit.jupiter.api.Test;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
12+
import org.springframework.boot.test.mock.mockito.MockBean;
13+
import org.springframework.http.MediaType;
14+
import org.springframework.test.web.servlet.MockMvc;
15+
import com.fasterxml.jackson.databind.ObjectMapper;
16+
import com.splunk.log4j.dto.Student;
17+
import com.splunk.log4j.service.StudentService;
18+
19+
@WebMvcTest(StudentController.class)
20+
class StudentControllerUnitTest {
21+
22+
@Autowired
23+
private MockMvc mockMvc;
24+
25+
@MockBean
26+
private StudentService studentService;
27+
28+
@Autowired
29+
private ObjectMapper objectMapper;
30+
31+
@Test
32+
void whenAddStudentCalled_thenReturnSuccessAndAddedStudent() throws Exception {
33+
Student student = new Student();
34+
student.setName("Ram");
35+
student.setRollNumber(3);
36+
37+
when(studentService.addStudent(student)).thenReturn(student);
38+
39+
mockMvc.perform(post("/students").contentType(MediaType.APPLICATION_JSON)
40+
.content(objectMapper.writeValueAsString(student)))
41+
.andExpect(status().isOk())
42+
.andExpect(content().json(objectMapper.writeValueAsString(student)))
43+
.andReturn();
44+
}
45+
46+
@Test
47+
void whenGetStudentCalled_thenReturnStudentByIndex() throws Exception {
48+
Student student = new Student();
49+
student.setName("Ram");
50+
student.setRollNumber(4);
51+
52+
when(studentService.getStudent(0)).thenReturn(student);
53+
54+
mockMvc.perform(get("/students/0"))
55+
.andExpect(status().isOk())
56+
.andExpect(content().json(objectMapper.writeValueAsString(student)));
57+
}
58+
59+
@Test
60+
void whenGetStudentsCalled_thenReturnListOfStudent() throws Exception {
61+
Student student = new Student();
62+
student.setName("Ram");
63+
student.setRollNumber(4);
64+
65+
Student student2 = new Student();
66+
student.setName("Sham");
67+
student.setRollNumber(3);
68+
69+
when(studentService.getStudents()).thenReturn(List.of(student, student2));
70+
71+
mockMvc.perform(get("/students"))
72+
.andExpect(status().isOk())
73+
.andExpect(content().json(objectMapper.writeValueAsString(List.of(student, student2))));
74+
}
75+
}

0 commit comments

Comments
 (0)