# Simple Calculator Project

### Module Objectives

* Creating a simple project
* Adding code
* Uploading our code to GitLab
* Writing test cases to check for failed and successful builds

### Creating a Project Repository

Now that we have everything set up, we can start making projects. Start by logging into your normal user (if you haven't already), then go to **Projects -> New Project.** *You can remove the README.*

<figure><img src="/files/GqIf9Kxk15fggtHXC5RF" alt=""><figcaption><p>Set your project to public or private - we can use private for this one since we have our SSH key uploaded</p></figcaption></figure>

Once it's been created, git clone your project into a directory

<figure><img src="/files/UoDsQWawQUNn2V3EZu99" alt=""><figcaption><p>Cloning the project to our Windows host</p></figcaption></figure>

### Making a simple calculator

To test if our runner works, we will create a simple program which we can upload then run tests and configure pipelines for.

Let's make a simple calculator. I'll be using Go for this example

{% code title="calculator.go" %}

```go
package main
import "fmt"


func Add(x, y int) (res int) {
	return x + y
}


func Subtract(x, y int) (res int) {
	return x - y
}


func main() {
	fmt.Println("Addition: ", Add(1, 2))
	fmt.Println("Subtraction: ", Subtract(4, 2))
}
```

{% endcode %}

Test this by running `go run calculator.go`

```
Addition:  3
Subtraction:  2
```

Now that it works, we can push our demo app to our repository

```bash
> git switch -c main
> git add .
> git commit -m "Calculator Demo"
> git push origin main
```

<figure><img src="/files/wpoKPRXh6sB7pgVcXl17" alt=""><figcaption><p>Post-Push Repository</p></figcaption></figure>

### Writing Test Cases

Now that we have a functioning program, we can write a test case to check whether the values are acceptable, if not it will fail the build. We will reuse the code above for this

[*Reference*](https://www.digitalocean.com/community/tutorials/how-to-write-unit-tests-in-go-using-go-test-and-the-testing-package)

{% code title="calculator.go" %}

```go
package main
import "fmt"


func Add(x, y int) (res int) {
	return x + y
}


func Subtract(x, y int) (res int) {
	return x - y
}


func main() {
	fmt.Println("Addition: ", Add(1, 2))
	fmt.Println("Subtraction: ", Subtract(4, 2))
}
```

{% endcode %}

{% code title="calculator\_test.go" %}

```go
package main
import "testing"

func TestAdd(t *testing.T){
	got := Add(4, 4)
	want:= 8

	if got != want {
		t.Errorf("got %q. wanted %q", got, want)
	}
}


func TestSubtract(t *testing.T){
	got := Subtract(6, 4)
	want:= 2

	if got != want {
		t.Errorf("got %q. wanted %q", got, want)
	}
}

```

{% endcode %}

To run the test:

```bash
> go mod init calculator
> go test

# Result
> go test         
PASS
ok      calculator      0.127s
```

We can test for failure as well by changing the `want` variable to a random integer/string

```bash
> go test
--- FAIL: TestAdd (0.00s)
    calculator_test.go:9: got '\b'. wanted '\x05'
--- FAIL: TestSubtract (0.00s)
    calculator_test.go:19: got '\x02'. wanted '\x03'
FAIL
exit status 1
FAIL    calculator      0.215s
```

Change back the values and push the code to your repository


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://blog.securescape.cc/offensive-security/red-team/offensive-development/offensive-devops/gitlab/simple-calculator-project.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
