Coder Social home page Coder Social logo

wangzhiisvery666 / dubbo-samples Goto Github PK

View Code? Open in Web Editor NEW

This project forked from apache/dubbo-samples

0.0 0.0 0.0 4.49 MB

samples for Apache Dubbo

License: Apache License 2.0

Shell 1.89% Java 97.07% Scala 0.48% Thrift 0.02% HTML 0.26% Dockerfile 0.26% Roff 0.02%

dubbo-samples's Introduction

Dubbo Samples

Samples for Apache Dubbo

Build Status license

This repository contains a number of projects to illustrate various usages of Dubbo from basic to advanced, pls. check README in each individual sub projects. It is also helpful to cross reference to Dubbo User Manual to understand the features demoed in this project.

What's more, dubbo-go samples are moved to dubbo-go-samples.

Build and Run Samples

To compile all samples, run the following command in the top directory of this project, or step into the sub directories to compile one single sample:

mvn clean package

You may need to read each individual README under the sub directories if you have to understand how to build and run.

Integration Test

This project is also used for integration tests for dubbo.

How to build and run a integration test

Dubbo integration test base on docker container, and relies on an image used to run the provider application and test cases.

Integration test leverages docker to setup test environment, more accurately, to start dubbo provider instance, and any other supporting systems like registry center if necessary, in docker.

Please install docker and docker-compose first, then build the test image dubbo/sample-test.

cd dubbo-samples
./test/build-test-image.sh

Use a debian mirror through env DEBIAN_MIRROR if apt download files slowly, the following example uses aliyun mirror server http://mirrors.aliyun.com/ubuntu/ :

cd dubbo-samples
DEBIAN_MIRROR=http://mirrors.aliyun.com ./test/build-test-image.sh

Then we use the run-tests.sh script to run the test cases.

  • Run single test case

    cd dubbo-samples
    ./test/run-tests.sh <project.basedir>

    For example, run the dubbo-samples-annotation test case:

    ./test/run-tests.sh dubbo-samples-annotation
    
  • Run all test cases

    cd dubbo-samples
    ./test/run-tests.sh 

If docker container fails to startup successfully in any case, you can check log files in directory ${project.basedir}/target/logs to understand what happens.

Pls. note integration tests rely on a Docker environment, make sure the docker environment is available before running them.

How to add more integration test

If you are interested in contributing more integration test for dubbo, pls. read further to understand how to enable integration test for one particular sample from the scratch.

Please follow the steps below:

  1. Add a file named case-configuration.yml to test project.

    This file is used to configure the test modules and environment, including dubbo provider / test services, dependent third-party services.

  2. Add a file named case-versions.conf to test project.

    This file is used to configure the supported component version rules to support multi-version testing.

Details of case-configuration.yml:

Take the case dubbo-samples-annotation as an example:

services:
  dubbo-samples-annotation:
    type: app
    basedir: .
    mainClass: org.apache.dubbo.samples.annotation.AnnotationProviderBootstrap

  dubbo-samples-annotation-test:
    type: test
    basedir: .
    tests:
      - "**/*IT.class"
    systemProps:
      - zookeeper.address=dubbo-samples-annotation
      - zookeeper.port=2181
      - dubbo.address=dubbo-samples-annotation
      - dubbo.port=20880
    waitPortsBeforeRun:
      - dubbo-samples-annotation:2181
      - dubbo-samples-annotation:20880
    depends_on:
      - dubbo-samples-annotation

The project contains a dubbo provider AnnotationProviderBootstrap and an embedded zookeeper server, as well as a test class AnnotationServicesIT.

Therefore, we have to define two services, one service runs AnnotationProviderBootstrap, and the other service runs test classes.

The service type of running dubbo provider is app, and the service type of running test is test.

The project directory is the same as the case configuration directory, so basedir is . .

Use hostname to access between containers, the default hostname of the container is the same as serviceName.

So through dubbo-samples-annotation:2181, the embedded zookeeper server can be accessed from the test container.

There are many test cases similar to this example, only need to modify the mainClass and hostname. Extract the changed as variables, and the unchanged content as templates. When using the template, you only need to modify the variable value, which makes the case configuration easier.

The above example can use a template app-builtin-zookeeper.yml, use from to reference it and override the variable value in props:

from: app-builtin-zookeeper.yml

props:
  project_name: dubbo-samples-annotation
  main_class: org.apache.dubbo.samples.annotation.AnnotationProviderBootstrap
  zookeeper_port: 2181
  dubbo_port: 20880

Another template is app-external-zookeeper.yml, which supports an external zookeeper service. you can find all the templates in the directory test/dubbo-scenario-builder/src/main/resources/configs.

Details of case-versions.conf:

Version rules for spring app:

# Spring app
dubbo.version=2.7*, 3.*
spring.version=4.*, 5.*

Version rules for spring-boot 1.x app:

# SpringBoot app
dubbo.version=2.7*, 3.*
spring-boot.version=1.*

Version rules for spring-boot 2.x app:

# SpringBoot app
dubbo.version=2.7*, 3.*
spring-boot.version=2.*

For more details, please refer to the following case configurations:

That's it, then feel free to add more integration test for the Dubbo project, have fun.

dubbo-samples's People

Contributors

beiwei30 avatar chickenlj avatar albumenj avatar fangyincheng avatar guohao avatar kylixs avatar zouyx avatar lovepoem avatar nzomkxia avatar htynkn avatar cvictory avatar crazyhzm avatar plusmancn avatar kevinw66 avatar hengyunabc avatar ralf0131 avatar patrick0308 avatar alexstocks avatar kun-song avatar chenyu2016 avatar jerrick-zhu avatar tswstarplanet avatar kimmking avatar diecui1202 avatar cityiron avatar daimingbao avatar conghuhu avatar sss-k avatar sinmaystar avatar xiaoheng1 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.