Systems | Development | Analytics | API | Testing

Latest Posts

Using Tc-Bpf Program To Redirect Dns Traffic In Docker Containers

The adoption of eBPF (Extended Berkeley Packet Filter) has revolutionized high-performance applications, tracing, security, and packet filtering within the Linux kernel. Specifically, TC-BPF, a type of eBPF program attached to the Traffic Control (TC) layer, has emerged as a powerful tool for packet manipulation in both ingress and egress. This blog delves into the practical application of TC-BPF to redirect DNS queries in a Docker environment.

Adding Colour To The Log Output Of Logging Libraries In Go

Logging is an integral part of software development, providing developers with valuable insights into the behaviour and performance of their applications. In the Go programming language, various logging libraries, such as the standard library’s log package or third-party options like logrus , zap and zerolog, facilitate the generation of log output.

Scram Authentication: Overcoming Mock Testing Challenges

In the vast landscape of cybersecurity, authentication stands as the guardian of digital fortresses, ensuring that only the right individuals gain access to sensitive information and services. Imagine you’re at the entrance of a top-secret facility, and you need to prove your identity to the security personnel. In the digital realm, this is precisely what authentication mechanisms do – they verify your identity before granting access.

Choosing The Perfect Message Queue: Factors To Consider

Not long ago, I was handed a problem that’s no stranger to the world of programming: making asynchronous threads communicate effectively within the same process. Given the widespread nature of this issue, I expected to find an existing solution to resolve it. My search led me to the concept of message queue, which seemed promising for streamlining this communication challenge.

Managing Go Processes

While working on an application that required executing a command to run a blocking program, such as a TCP/HTTP server, I encountered an interesting challenge. I needed a way to stop the application and its child processes when a signal was sent to the main program, such as SIGINT (Ctrl+C) or SIGTERM. This blog post shares my journey and the solutions I found to manage processes effectively in a Go application, focusing on Linux environments.

How I Simulated A Response From A Third Party App

Whether you’re building a web application, a mobile app, or any other software product, integrating with third-party APIs is almost inevitable. But what happens when you need to test your application’s behavior without relying on these external services? That’s where the magic of simulation comes in handy. In this blog, we’ll explore how you can simulate responses effectively, even if the actual service isn’t available.

Write Clean And Efficient Table Driven Unit Tests In Go

Table driven tests, also known as parameterized tests, have became very popular over the past few years, due to their ability to eliminate repetition. Table driven tests make it quite a bit easier to re-use the same values for different sets of tests by just moving the table outside of the scope of the test function. Different tests may benefit from the same input, and each test may have completely different configration, concurrency etc…

Canary Testing: A Comprehensive Guide For Developers

Imagine you’re a miner with a canary in a cage. If the air is toxic, the canary reacts first, giving you a heads-up. Canary testing works in a similar fashion for your software. Instead of releasing the whole flock (users) into a potentially toxic or buggy environment, you release just one canary (a small subset of users) to test the waters.

Mock Vs Stub Vs Fake: Understand The Difference

Testing software is like putting it through a series of challenges to make sure it’s tough enough for real-world use. Whether we’re testing each piece individually (unit testing) or how they all work together (integration testing), we need to be prepared for different situations. Sometimes, testing is tricky.There are times, when we need to isolate parts of our code from their dependencies.